如何向 Git Bash 终端发送 EOF 信号?

bur*_*rfl 7 git bash terminal stdin eof

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

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

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

Bre*_*itt 7

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

  • 我试过了,但很困惑它在屏幕上打印了“^Z”。`Ctrl-C` 终止进程而不打印任何内容,所以我认为它不起作用。但是,在执行`Ctrl-Z <Enter>` 后,它起作用了。给那些跟随我的人注意:这似乎在一行的末尾不起作用。看起来它需要在自己的线上。谢谢你,@Brendan。 (3认同)
  • 我无意中只启动了“pv”,在“Ctrl-Z”上它只打印了“87891708 [sig] bash 2363!” sigpacket::process: 抑制信号 18 到 win32 进程 (pid 0)`。我该如何出去? (2认同)

Jos*_*der 6

我在 Windows 上的 Git Bash 中使用的一个简单解决方法是捕获程序的输入。

例如,而不是运行

java my_package.Main
Run Code Online (Sandbox Code Playgroud)

你可以运行

cat | java my_package.Main
Run Code Online (Sandbox Code Playgroud)

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

因此,使用此命令时,您可以在输入消息后键入 Ctl-D,java 程序将正确看到消息的结尾。