我在 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+c
和ctrl+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