Bash windows 10中cygwin的EOF是什么

Bash windows 10中cygwin的EOF是什么,bash,shell,cygwin,Bash,Shell,Cygwin,我曾经在win8.1上运行cygwin,同时向一个用来表示EOF的程序CTRL-Z提供输入。今天我在win10上安装了cygwin,并运行了“a.out”。在输入数据之后,当我按下CTRL-Z键时,我得到消息“Suspended”,并返回shell提示。我用bash和csh尝试了这个,结果是一样的。CTRL-D也不起作用,它正在杀死外壳 为了确认这只是个问题,没有其他问题,我创建了一个新的input.txt文件,并在其中输入了相关的输入数据,然后运行“a.out

我曾经在win8.1上运行cygwin,同时向一个用来表示EOF的程序CTRL-Z提供输入。今天我在win10上安装了cygwin,并运行了“a.out”。在输入数据之后,当我按下CTRL-Z键时,我得到消息“Suspended”,并返回shell提示。我用bash和csh尝试了这个,结果是一样的。CTRL-D也不起作用,它正在杀死外壳

为了确认这只是个问题,没有其他问题,我创建了一个新的input.txt文件,并在其中输入了相关的输入数据,然后运行“a.out 如何解决这个问题


注意:我现在结束这个问题,并在一个新问题中提供更多细节

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

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

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

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

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


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

ctrl-z是用于暂停进程的unix命令。你考虑过MSYS吗?ctrl-D在那里工作。检查键盘驱动程序使用
stty-a
生成信号的方式(在
cchars
下查找
eof
)。您也可以使用
stty
更改设置,但我不建议这样做。CTRL+D“杀死外壳”,因为您正在发送外壳EOF。您可以使用
set-o ignoreof
Jean Francoise:我使用的是cygwin,而不是msys.cdarke:我使用的是ignoreof,请参见下面的注释。Ctrl-Z用于在我的笔记本电脑中使用win8.1作为EOF。在使用win10的新笔记本电脑中,以及新安装的cygwin中,这项功能不再有效。按照建议,我现在做了“设置-忽略”。现在,当我在相关输入之后按Ctrl-D时,什么也没有发生(看起来Ctrl-D只是被忽略了),当我按Ctrl-Z时,我现在得到的消息是“Stopped”而不是“Suspended”。但无论哪种方式,程序都会在该点停止,并且不会打印其预期输出。不,我没有使用stty。stty的输出是什么(没有参数)?速度38400波特;直线=0;ixany@R71:抱歉,请尝试
stty-a
。输出应该包括类似于
eof=^D
的内容。Ctrl-Z在Windows下触发文件结束条件。在任何类似Unix的环境下(包括Cygwin,即使它在Windows下运行),Ctrl-D都应该触发并结束文件条件。您需要密切注意是在程序中还是在shell中键入Ctrl-D。谢谢。“stty-a”报告“eof=^D;susp=^Z”。所以现在我很困惑。我运行程序(a.out)并输入输入,然后按^D,但什么也没发生,程序似乎在等待进一步的输入(为什么??)。然而,当我运行“a.out