基本 bash 行为

基本 bash 行为

我期望

echo |

执行以下操作:

  1. 将空字符串打印到stdout.
  2. 管道stdoutstdin.

我所期望的将空字符串写入的stdin是:什么也没有。相反发生了什么:出现一个提示>,其行为类似于 bash 中的 bash:

> echo m
m

这是为什么?

答案1

|是互连两个命令的运算符。

cmd1 | cmd2

启动cmd1并与连接到管道写入端的cmd2stdout和连接到同一管道读取端的 stdin 并行。cmd1cmd2

在:

cmd1 |

你缺少右手命令。

shell 通过发出辅助提示符(PS2默认情况下为>)来询问您其余的命令,从而告诉您这一点。

如果您希望 stdoutecho成为管道的写入端,而其 stdin 成为同一管道的读取端(但请注意,不是echo从其 stdin 读取),则需要使用类似yash的shell有一个运算符(管道重定向运算符>>|):

echo test 1>>|0

这告诉yash我们创建一个管道并将写入端分配给 fd 1 (stdout),将读取端分配给 fd 0 (stdin)。

再说一次,这没有什么意义。

答案2

你想通过管道输入什么?后面|必须跟另一个命令,bash 会显示>提示您完成管道。

执行以下两项操作:

  • 将空字符串打印到标准输出。
  • 通过管道将标准输出传输到标准输入。

    回声 -n '' |猫

这里cat只是第二个命令的占位符,在本例中它只是将其标准输入发送到其标准输出。

相关内容