Coba jalankan stty -a
untuk melihat pengaturan terminal Anda. Kecurigaan saya adalah bahwa icrnl
pengaturan Anda tidak disetel dan akan ditampilkan sebagai -icrnl
(tanda minus berarti dimatikan) alih-alih memiliki pengaturan yang biasa untuk dihidupkan. Berikut adalah bagaimana terminal saya biasanya diatur ketika saya masuk:
$ 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
Dan saya tidak punya masalah dengan akhiran baris: baik kembali (^ M) atau masukkan (^ J) akan mengakhiri jalur input. Tetapi jika saya icrnl
mematikan maka ^ kode M tiba-tiba muncul setiap kali saya berbicara dengan sebuah program dan tekan 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
Kode ini icrnl
berarti "ubah carriage return menjadi baris baru" dan bersembunyi dari program yang sedang berjalan yang mungkin Anda ketikkan ^ M ketika Unix benar-benar menginginkan ^ J. Keyboard lama dulunya memiliki tombol Return dan Enter yang terpisah (di mana Return biasanya memajukan Anda melalui formulir dan Enter mengirimkannya), tetapi hari ini kami umumnya hanya memiliki satu kunci akhir baris dan oleh karena itu pengaturan terminal ini membantu menggabungkan dua arti.
Tambahkan stty icrnl
perintah ke Anda .profile
atau .bashrc
jika Anda menemukan bahwa ini memang pengaturan masalah.