Spróbuj uruchomić, stty -a
aby wyświetlić ustawienia terminala. Podejrzewam, że twoje icrnl
ustawienie nie jest ustawione i będzie pokazane jako -icrnl
(znak minus oznacza, że jest wyłączone) zamiast włączania zwykłego ustawienia. Oto jak zwykle mój terminal jest konfigurowany po zalogowaniu:
$ stty -a
speed 38400 baud; rows 45; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; 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
I nie mam problemu z zakończeniami linii: albo return (^ M), albo enter (^ J) zakończy linie wejściowe. Ale jeśli się wyłączę, icrnl
kody ^ M nagle pojawiają się za każdym razem, gdy rozmawiam z programem i wciskam Enter:
$ stty -icrnl
$ read line
Line of text^M^M^M^M
$ stty -a
speed 38400 baud; rows 45; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; 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
Kod icrnl
oznacza „zamień powrót karetki w nowe linie” i ukrywa przed uruchomionym programem, że możesz pisać ^ M, gdy Unix naprawdę chce ^ J. Stare klawiatury posiadały osobny klawisz Return i Enter (gdzie Return zwykle przechodził przez formularz, a Enter go przesyłał), ale dzisiaj zwykle mamy tylko jeden klawisz kończący wiersz, więc to ustawienie terminala pomaga połączyć dwa znaczenia.
Dodaj stty icrnl
polecenie do swojego .profile
lub .bashrc
jeśli okaże się, że to jest rzeczywiście ustawienie problemu.