奇怪的控制行为

Tyi*_*ilo 9 bash keyboard-shortcuts cat

我可以cat通过做一个非常简单的文本编辑器来使用cat > foo.txt
如果我然后输入:

bar
baz
Run Code Online (Sandbox Code Playgroud)

然后按ctrl+ D,它现在看起来像这样:

$ cat > foo.txt
bar
baz^D
Run Code Online (Sandbox Code Playgroud)

光标在^. 如果我再按一次,文件将被保存。但是,如果我按任何东西(好吧也许不是任何东西,但主要是任何东西),我只是继续编辑文件。

这是正常行为吗?

glg*_*lgl 13

是的。它确实与^D确实有关:它只是停止当前read(2)调用。

如果程序执行int rdbytes = read(fd, buffer, sizeof buffer);并且您按^D中间,则read()返回缓冲区中当前读取的字节,返回它们的编号。线路终端也是如此;将\n在年底总是交付。

因此,只有^D在一行的开头或另一行之后的 a才^D具有read()返回的预期效果,发出0EOF 信号。


Klo*_*lox 11

是的,这是正常行为。单个 Control-D 通常仅在它是该行的开头时才会出现。这以一个 Control-D 退出:

$ cat > foo.txt
bar
baz
^D
Run Code Online (Sandbox Code Playgroud)