如何在 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。
我无意中开始了 pv
和 Ctrl-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 吗?