我期望
echo |
执行以下操作:
- 将空字符串打印到
stdout
. - 管道
stdout
到stdin
.
我所期望的将空字符串写入的stdin
是:什么也没有。相反发生了什么:出现一个提示>
,其行为类似于 bash 中的 bash:
> echo m
m
这是为什么?
答案1
|
是互连两个命令的运算符。
cmd1 | cmd2
启动cmd1
并与连接到管道写入端的cmd2
stdout和连接到同一管道读取端的 stdin 并行。cmd1
cmd2
在:
cmd1 |
你缺少右手命令。
shell 通过发出辅助提示符(PS2
默认情况下为>
)来询问您其余的命令,从而告诉您这一点。
如果您希望 stdoutecho
成为管道的写入端,而其 stdin 成为同一管道的读取端(但请注意,不是echo
从其 stdin 读取),则需要使用类似yash
的shell有一个运算符(管道重定向运算符>>|
):
echo test 1>>|0
这告诉yash
我们创建一个管道并将写入端分配给 fd 1 (stdout),将读取端分配给 fd 0 (stdin)。
再说一次,这没有什么意义。
答案2
你想通过管道输入什么?后面|
必须跟另一个命令,bash 会显示>
提示您完成管道。
执行以下两项操作:
- 将空字符串打印到标准输出。
通过管道将标准输出传输到标准输入。
回声 -n '' |猫
这里cat
只是第二个命令的占位符,在本例中它只是将其标准输入发送到其标准输出。