Спробуйте запустити, stty -a
щоб переглянути налаштування терміналу. Я підозрюю, що ваш icrnl
параметр не встановлений і відображатиметься як -icrnl
(знак мінус означає, що його вимкнено) замість того, щоб його звичайне значення було включене. Ось як зазвичай встановлюється мій термінал під час входу в систему:
$ 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
І у мене немає проблем із закінченнями рядків: або return (^ M), або enter (^ J) закінчать рядки введення. Але якщо я icrnl
вимикаю, то ^ M-коди раптово з’являються щоразу, коли я розмовляю з програмою і натискаю клавішу 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
Код icrnl
означає "повернення каретки повертається в нові рядки" і приховує від запущеної програми, яку ви могли набрати ^ M, коли Unix дуже хоче ^ J. У старих клавіатурах був окремий ключ повернення та введення (де «Return» зазвичай просунув вас через форму та Enter подав її), але сьогодні ми, як правило, маємо лише один ключ, що закінчується рядком, і цей параметр терміналу допомагає поєднати два значення.
Додайте stty icrnl
команду до свого .profile
або .bashrc
якщо ви виявите, що це справді проблема налаштування.