为什么即使设置了 ICRNL 终端也会发送 CR?

pau*_*aul 2 shell bash terminal tty newlines

我有一个带bash外壳的终端。

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

在此处输入图片说明

但是我做了一个测试,结果表明bash会收到CR而不是LF. 这是为什么?

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

Gil*_*il' 5

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

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

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

  1. 在一个终端中:

    bash-4.2$ tty
    /dev/pts/3
    bash-4.2$ 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在另一个终端:

    $ stty -a </dev/pts/3
    … -icrnl …
    
    Run Code Online (Sandbox Code Playgroud)