假设 tty“cooked”模式,ctrl-D通过终止行输入处理并将已输入的数据发送到应用程序来工作。因此,如果您键入“abc”,后跟ctrl-D这三个字节将被发送到应用程序。
现在,应用程序通常如何确定文件结尾?当读取返回 0 字节时,假定 EOF。所以你需要让读取返回 0 字节。如果您先点击enter,然后点击ctrl- D,则首先您键入的任何内容都会与换行符一起发送到应用程序。然后ctrl-D会使您输入的任何数据(即无数据!)发送到应用程序,该应用程序读取 0 字节,并假定 EOF。
enter如果您在点击之前输入任何内容ctrl-D那么应用程序会获取这些击键,并等待更多。因此,要在不先点击 的情况下生成 EOF enter,请连续点击ctrl-D两次。
所以回答你的问题:在点击ctrl-之前你是否首先输入了任何字符(除了换行符) D?如果是这样,请连续尝试两次。
这可以用例如:
$ wc -l
test123 0 1 7
Run Code Online (Sandbox Code Playgroud)
(在 后点击ctrl-两次。)Dtest123
该wc实用程序显示读取的行数、单词数和字符数。行数为 0,因为您没有输入换行符,并且行test123数为 1 个单词和 7 个字符长。