为什么 stty 设置 onlcr 不添加回车符?

为什么 stty 设置 onlcr 不添加回车符?

TLDR - 我已经onlcr在我的终端中进行了配置,但我没有看到\r添加


如果将两个 FTDI 串行转换器连接在一起,并将它们都插入我的计算机,我会得到两个/dev/ttyUSB0端口/dev/ttyUSB1

如果我在不同的终端中打开它们picocom,我可以通过来回发送消息来确保它们正确连接,如果我退出使用C-A C-Q它,则保留端口配置如下:

$ stty -F /dev/ttyUSB0 -a
speed 9600 baud; rows 0; columns 0; 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;
discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar 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 -flusho -extproc
$ stty -F /dev/ttyUSB1 -a
speed 9600 baud; rows 0; columns 0; 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; discard = ^O;
min = 1; time = 0;
-parenb -parodd -cmspar 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 -flusho -extproc

现在,如果我打开两个终端来监听两个串口:

$ cat -v /dev/ttyUSB0
$ cat -v /dev/ttyUSB1

(实际上,对于这个特定的实验,我只需要其中一个,但同时拥有两个也没什么坏处)

然后在第三个终端中发送如下一行:

$ echo this is a test > /dev/ttyUSB1

然后再发送一行来证明我正在打印回车符:

$ echo -e 'this is another test\r' > /dev/ttyUSB1

然后这就是我所看到的:

$ cat -v /dev/ttyUSB0
this is a test
this is another test^M

为什么我看不到^M第 1 行和^M^M第 2 行?

icrnl在两个设备上都关闭了,所以它不应该将其转换回来,对吗?

为什么会发生(或没有发生)这种情况?

答案1

您的 stty 显示-opost关闭了所有输出处理,因此onlcr没有任何效果。

相关内容