为什么即使设置了ICRNL,终端仍发送CR?

为什么即使设置了ICRNL,终端仍发送CR?

我有一个带外壳的终端bash

终端ICRNL设置了标志(因此当终端发送 a 时CR,它将被转换为LF,然后LF将被发送到bash):

在此输入图像描述

但我做了一个测试,结果显示bash会收到CR和不会收到LF。这是为什么?

我所做的测试是hexdump在另一个终端中运行,并使其读取第一个终端发送的内容。

答案1

当您stty -a从 bash 提示符运行时,您会看到终端设置,而 bash 不读取命令行。

当 bash 读取命令行时,它会更改一些终端设置,包括icrnl(关闭,因为 bash 需要原始输入,因为它进行自己的输入处理)。 Bash 在运行命令之前恢复原始设置。

要在 bash 提示符下查看终端设置,请记下这是哪个终端,然后stty从另一个终端运行。例如:

  1. 在一个终端中:

    bash-4.2$ tty
    /dev/pts/3
    bash-4.2$ 
    
  2. 在另一个终端中:

    $ stty -a </dev/pts/3
    … -icrnl …
    

相关内容