如何在 Windows 上的 Git Bash 终端下向 EOF 发出信号以关闭标准输入? Ctrl-D 不起作用

Posted

技术标签:

【中文标题】如何在 Windows 上的 Git Bash 终端下向 EOF 发出信号以关闭标准输入? Ctrl-D 不起作用【英文标题】:How can I signal EOF to close stdin under the Git Bash terminal on Windows? Ctrl-D didn't work 【发布时间】:2013-03-18 09:02:00 【问题描述】:

我正在编写一个命令行工具。这个工具可以做的一件事(当然不是唯一的)是从标准输入读取它的输入。当我注意到我不知道如何向它发出 EOF 信号时,我正在交互式地测试它(通过输入输入,而不是在其中插入文件)。

今晚我花了很多时间在谷歌上搜索,但没有发现任何帮助。我也搜索过。请随时向我指出一个重复的问题,但我保证我已尽职尽责。

编辑:提及我在 Windows 上执行此操作可能会有所帮助(?)。所以我相信终端或多或少是一个品牌的 MinGW?

【问题讨论】:

【参考方案1】:

我在 Windows 上的 Git Bash 中使用的一个简单解决方法是对程序的输入进行分类。

例如,而不是运行

java my_package.Main

你可以跑

cat | java my_package.Main

这是因为 cat 程序是一个 linuxy 程序,可以接受来自终端的消息结束,而 java 可以通过管道正确接收消息结束命令。

所以在使用这个命令的时候,你可以在输入信息后输入Ctl-D,java程序会正确看到信息的结尾。

【讨论】:

FWIW,这对我来说也适用于 Git Bash 下 Windows 10 上的 Go 程序。【参考方案2】:

"^d ^d" 对我有用。只需将此字符串添加到输入的末尾即可。

【讨论】:

解释一下为什么这个答案是正确的会很有用。【参考方案3】:

它是 ^D,ASCII 传输结束字符。所有 GNU-userland 工具都将使用 POSIX 标准。

【讨论】:

在 Windows 上是这样吗?我只是尝试将 ^D 发送到 GnuWin32 的 cat 命令,但它没有做任何事情。 ^Z 确实按预期退出了 cat。 ^D 不起作用。程序读取它并将其解释为文字“^D”。 这是 Ctrl-D,而不是两个字符的 caret-d 序列。我经常在 Windows 上使用 git bash,所以我已经知道了,我在回答之前在 shell 中对其进行了测试,只是因为我当时恰好在 Windows 上,我刚才又用cat 再次尝试了它。我在这里只能说,“为我工作”。抱歉,我没有更好的解释。 行为可能因程序而异。 cat 似乎比 Java 或 Go 程序表现得更好(根据 ***.com/a/59686569/11210494)。【参考方案4】:

如果您尝试在 Windows 下将 EOF 发送到程序的输入,Ctrl-Z 就是您要查找的内容。

【讨论】:

我试过了,但很困惑它在屏幕上确实打印了“^Z”。 Ctrl-C 终止进程而不打印任何内容,所以我认为它不起作用。但是,在执行Ctrl-Z <Enter> 之后,它起作用了。给跟随我的人的注意事项:这似乎在一行的末尾不起作用。看来它需要在自己的路线上。谢谢你,@Brendan。 我无意中开始了 pvCtrl-Z 它只是打印 87891708 [sig] bash 2363! sigpacket::process: Suppressing signal 18 to win32 process (pid 0)。我怎么出去? 截至 2021 年,当从 Git Bash 执行时(正如 OP 在其标题中指定的那样),这会产生警告 1 [sig] bash 804! sigpacket::process: Suppressing signal 18 to win32 process (pid 2032) 只是执行some-prog 然后尝试这个,它似乎产生Suppressing signal 18 to win32 process 警告,但cat | some-prog 似乎在Git Bash Windows 10 上工作得更好,然后正常的Ctrl-D 似乎努力关闭标准输入。通过***.com/a/70293204/11210494

以上是关于如何在 Windows 上的 Git Bash 终端下向 EOF 发出信号以关闭标准输入? Ctrl-D 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 上显示当前分支和着色(如 Windows 上的 Git Bash)

如何在 Windows 上的 Git Bash 终端下向 EOF 发出信号以关闭标准输入? Ctrl-D 不起作用

如何在 Ubuntu on Windows (WSL) 上为我的 VS Code 终端使用 Bash?

我可以在 Windows 上的 Git Bash 中使用 gcloud 吗?

无法在 Windows 上的 Git Bash 中安装 pylint(Windows 应用商店)

如何从 Git Bash 中将命令行参数传递给 Windows 应用程序?