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

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

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

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

【问题讨论】:

    标签: git bash terminal stdin eof


    【解决方案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 程序表现得更好(根据 stackoverflow.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 似乎努力关闭标准输入。通过stackoverflow.com/a/70293204/11210494
    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 2020-02-20
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多