Bash:C-d到底做了什么?

时间:2012-12-12 11:41:54

标签: bash readline

如果我在输入结束时按C-d,则输入似乎已刷新,但不会向程序发送EOF。但是,如果我再次按C-d,则会发送EOF

为什么我第一次按C-d时未发送EOF?这种行为记录在哪里?

要试验自己玩cat,这是一个例子:

$ cat
abc<C-d>abc<C-d>
$

2 个答案:

答案 0 :(得分:4)

C-dEnd-of-transmission (EOT) character

  

在Unix中,文件结束字符(默认为EOT)会导致终端   驱动程序使其输入缓冲区中的所有字符可用   立即;通常司机会收集字符直到它   看到一个行尾字符。如果输入缓冲区为空(因为   自上一行结束后没有输入任何字符或   文件结束),从终端读取的程序读取计数   零字节。在Unix中,这种情况被理解为已达到   文件的结尾。

在您的示例中,当您运行cat并键入几个字符后跟C-d时,键入到该点的字符将发送到cat,然后将其打印到屏幕上。现在输入缓冲区为空,因此当您再次键入C-d时,cat从缓冲区读取零字节并终止,因为已满足文件结束条件。

答案 1 :(得分:0)

使用bash,你可能正在使用readline库。

当您要求提供文档时,here it is

你会看到Ctrl-D删除光标下面的字符,如果你继续阅读,你会发现许多精彩的快捷方式!