什么是Windows 10中的cygwin中的EOF

时间:2016-09-03 18:10:51

标签: bash shell cygwin

我曾经在win8.1上运行cygwin,并且在给用于表示EOF的程序CTRL-Z的输入时。今天我在win10上安装了cygwin,然后跑了#34; a.out"。输入输入数据后,当我按下CTRL-Z时,我收到消息" Suspended"然后我回到shell提示符。我用bash和csh尝试了这个,结果相同。 CTRL-D也不起作用,它正在杀死shell。

只是为了确认它只是这个问题而没有别的,我创建了一个新的input.txt文件,并在其中输入相关的输入数据,并运行" a.out< input.txt",它工作正常。所以问题只在于为STDIN定义EOF。

如何解决这个问题?

注意:我正在关闭此问题,并在新问题中提供更多详细信息reading till EOF in java on cygwin on windows-10

1 个答案:

答案 0 :(得分:2)

在类Unix系统上,包括Cygwin,Ctrl-D(默认情况下)配置为在从tty(终端/键盘)读取时触发文件结束条件。可以使用stty命令更改此设置,但看起来你还没有做到(而且你几乎肯定不应该)。

如果在运行从标准输入读取的程序时输入Ctrl-D,则可能会终止程序,具体取决于它对达到输入结束的响应方式。

Ctrl-Z发送一个暂停当前程序的信号(某些程序,如交互式shell,能够处理或忽略该信号)。 (Windows使用Ctrl-Z来触发文件结束。)

您描述的行为表示您在shell提示符下键入Ctrl-D。这给出了shell,而不是程序和文件结束条件。 shell通过终止响应(默认情况下;您可以使用set -o ignoreeof告诉shell忽略它。)

如果在运行程序时键入Ctrl-D ,它应该正确触发和文件结束条件并导致程序终止。

更新:通常你应该在任何其他输入之前键入Ctrl-D(导致程序根本没有接收输入),或者在键入Return之后立即键入Ctrl-D。要在一行中间触发文件结尾,您必须键入Ctrl-D 两次。 (这通常不是一个好主意,因为它会导致程序看到一个没有终止换行符的部分行。)