gpt4 book ai didi

bash - Windows 10 中 cygwin 中的 EOF 是什么

转载 作者:行者123 更新时间:2023-12-04 03:19:23 27 4
gpt4 key购买 nike

我曾经在 win8.1 上运行 cygwin,同时向程序输入 CTRL-Z 用于表示 EOF。今天我在 win10 上安装了 cygwin,并运行了“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

最佳答案

在类 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 两次。 (这通常不是一个好主意,因为它会导致程序看到没有终止换行符的部分行。)

关于bash - Windows 10 中 cygwin 中的 EOF 是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39309965/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com