What does "r" do in the following script?

Question:

I am using following script to reboot my router using Telnet:

#!/usr/bin/env python

import os
import telnetlib
from time import sleep

host = "192.168.1.1"
user = "USER"
password = "PASSWORD"
cmd = "system restart"

tn = telnetlib.Telnet(host)
sleep(1)

tn.read_until("Login: ")
tn.write(user + "nr")
sleep(1)

tn.read_until("Password: ")
tn.write(password + "nr")
sleep(1)

tn.write(cmd + "nr")

I don’t know why but removing "r" breaks this code. So what does "r" do in this script and when do I use "r" in general?

Note: I know about "Carriage Return" but still could not figure out it is used in my script. I am running this script in Linux.

Asked By: Alinwndrld

||

Answers:

r is the ASCII Carriage Return (CR) character.

There are different newline conventions used by different operating systems. The most common ones are:

  • CR+LF (rn);
  • LF (n);
  • CR (r).

The nr (LF+CR) looks unconventional.

edit: My reading of the Telnet RFC suggests that:

  1. CR+LF is the standard newline sequence used by the telnet protocol.
  2. LF+CR is an acceptable substitute:

The sequence "CR LF", as defined, will cause the NVT to be
positioned at the left margin of the next print line (as would,
for example, the sequence "LF CR").

Answered By: NPE

The 'r' character is the carriage return, and the carriage return-newline pair is both needed for newline in a network virtual terminal session.


From the old telnet specification (RFC 854) (page 11):

The sequence "CR LF", as defined, will cause the NVT to be
positioned at the left margin of the next print line (as would,
for example, the sequence "LF CR").

However, from the latest specification (RFC5198) (page 13):

  1. In Net-ASCII, CR MUST NOT appear except when immediately followed
    by either NUL or LF, with the latter (CR LF) designating the "new
    line" function. Today and as specified above, CR should
    generally appear only when followed by LF. Because page layout
    is better done in other ways, because NUL has a special
    interpretation in some programming languages, and to avoid other
    types of confusion, CR NUL should preferably be avoided as
    specified above.

  2. LF CR SHOULD NOT appear except as a side-effect of multiple CR LF
    sequences (e.g., CR LF CR LF).

So newline in Telnet should always be 'rn' but most implementations have either not been updated, or keeps the old 'nr' for backwards compatibility.

Actually, this has nothing to do with the usual Windows / Unix rn vs n issue. The TELNET procotol itself defines rn as the end-of-line sequence, independently of the operating system. See RFC854.

Answered By: isedev

'r' means ‘carriage return’ and it is similar to 'n' which means ‘line break’ or more commonly ‘new line’

in the old days of typewriters, you would have to move the carriage that writes back to the start of the line, and move the line down in order to write onto the next line.

in the modern computer era we still have this functionality for multiple reasons. but mostly we use only 'n' and automatically assume that we want to start writing from the start of the line, since it would not make much sense otherwise.

however, there are some times when we want to use JUST the 'r' and that would be if i want to write something to an output, and the instead of going down to a new line and writing something else, i want to write something over what i already wrote, this is how many programs in linux or in windows command line are able to have ‘progress’ information that changes on the same line.

nowadays most systems use only the 'n' to denote a newline. but some systems use both together.

you can see examples of this given in some of the other answers, but the most common are:

  • windows ends lines with 'rn'
  • mac ends lines with 'r'
  • unix/linux use 'n'

and some other programs also have specific uses for them.

for more information about the history of these characters

Answered By: Inbar Rose
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.