Hãy thử chạy stty -a
để xem các thiết lập thiết bị đầu cuối của bạn. Sự nghi ngờ của tôi là icrnl
cài đặt của bạn không được đặt và sẽ được hiển thị dưới dạng -icrnl
(dấu trừ có nghĩa là nó bị tắt) thay vì cài đặt thông thường được bật. Đây là cách thiết bị đầu cuối của tôi thường được thiết lập khi tôi đăng nhập:
$ 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
Và tôi không có vấn đề gì với kết thúc dòng: hoặc return (^ M) hoặc enter (^ J) sẽ kết thúc dòng đầu vào. Nhưng nếu tôi icrnl
tắt thì ^ M mã đột nhiên xuất hiện mỗi khi tôi đang nói chuyện với một chương trình và nhấn 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
Mã này icrnl
có nghĩa là lượt xe ngựa quay trở lại thành dòng mới, và ẩn khỏi chương trình đang chạy mà bạn có thể đang gõ ^ M khi Unix thực sự muốn ^ J. Bàn phím cũ được sử dụng để có một phím Return và Enter riêng biệt (trong đó Return thường nâng cao bạn thông qua một biểu mẫu và Enter đã gửi nó), nhưng ngày nay chúng ta thường chỉ có một phím kết thúc dòng và vì vậy cài đặt đầu cuối này giúp kết hợp hai ý nghĩa.
Thêm stty icrnl
lệnh vào .profile
hoặc .bashrc
nếu bạn thấy rằng đây thực sự là cài đặt vấn đề.