如何阻止终端请求更多管道输入?

如何阻止终端请求更多管道输入?

我在 Windows 上使用 git bash,想知道如何阻止终端在管道后请求更多输入(意外输入)。我知道以这种方式输入管道命令很不寻常,但我正在尝试模拟 bash 样式终端可以执行的某些操作。
例如,我的输入如下所示:

zecuse MINGW64 ~/source/repos/Sim
$ echo test |
> echo here| (pipe typed by accident)
> (enter key was pressed)
> (the caret is sitting here waiting for another command)

由于我没有重定向第一个回显,因此该命令链的输出应该只会被here输入到终端。但是,我不知道在意外管道之后应该输入什么来停止接受输入并运行命令。
我已经尝试过;,,ctrl+cctrl+d

  • ;=bash: syntax error near unexpected token ';'
  • ctrl+c= 终止该命令,这样就不会发生任何事情。我以为这可能会发生。
  • ctrl+d=bash: syntax error: unexpected end of file

是否有键盘快捷键或“空”命令对此不起作用?

更新

@Jesse_b 的答案的建议:非常有效,在查找了 I/O 重定向之后,我能够让所有内容按照我的预期出现在终端中。我正在将 echo 写入字符串以获取有关该项目的一些上下文,并使用 git bash 作为测试发生情况的方法。

$ echo test >&0 |
> echo here >&2|
> :

产生

test
here

答案1

IMO“正确”的方法是按ctrl+c并重做您的命令,但正如您发现的那样,这会杀死您的输出。

此外,您还可以做几件事:

:这本质上是一个“不执行任何操作”的命令,它将退出 0。这将结束您的管道,但不会产生命令的输出echo here
true与不执行任何命令类似,它将退出 0,有效地结束您的管道
false:and类似true,这将退出您的管道,只不过它将以 1 而不是 0 退出

问题是上一个命令的输出“通过管道”发送到标准输入到下一个命令。如果您给出的命令对输入没有任何作用,您将不会得到输出。

解决您的问题的方法(但绝对不应该被视为一般问题的一揽子解决方案)是使用cat.

$ echo test |
> echo here |
> cat
here

相关内容