Почему `date` не соответствует моему языку?

На скриншоте показано так называемое "лестничное движение", когда новая строка, посылаемая с компьютера на терминал, не переводится автоматически в кареточный возврат / перевод строки драйвером терминала.

Вы увидите это после запуска программы, которая временно изменяет режимы терминала, но не восстанавливает исходные режимы. Вы никогда не увидите этого в результате кодирования двоичного файла на экране.

Вы можете добиться такого поведения в некоторых оболочках (другие, такие как tcsh, сбрасывают режимы терминала после каждой команды). Вот пример с использованием dash:

$ stty -a
speed 38400 baud; rows 40; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = ;
eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
$ stty -onlcr
$ stty -a
         speed 38400 baud; rows 40; columns 80; line = 0;
                                                         intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = ;
                                              eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
                                            werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
                   -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
                                                                            -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
                                                                          -iuclc -ixany -imaxbel -iutf8
                       opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
                       isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
                  echoctl echoke
                                $ 

Команда reset, как было предложено, сбросит режимы терминала, но также сбросит функции самого терминала. Можно также использовать

stty sane

или, более конкретно,

stty onlcr

но reset требует наименьшего набора текста.

Дополнительная литература:

1
16.08.2015, 03:50
0 ответов

Теги

Похожие вопросы