shell数据管道中的并行性

时间:2018-05-26 06:35:21

标签: bash shell command-line pipe pipeline

所以我正在阅读this文章,了解shell命令如何比hadoop集群更快更快地处理大量数据。

我在数据管道中读到,并行处理shell命令。

我试过

sleep 3 | echo "Hello world."

打印Hello World并进入睡眠模式,该模式在3s后退出

但是当我这样做的时候,

echo "Hello World" | sleep 2

刚进入睡眠状态。 Hello World未打印

任何人都可以向我解释为什么会这样吗? 如果命令是并行执行的,那么Hello World是否应该以任何方式打印?

2 个答案:

答案 0 :(得分:1)

管道(|)用于处理一个命令的输出,作为另一个命令的输入发送,例如:

echo "hello there"只会打印hello there,但是当放置|并在其后添加sed代码时,例如 - > echo "hello there" | sed "s/hello/hi/"然后它将打印hi there,因为echo的输出作为sed命令的标准输入。

所以在你的第一个案例中:

sleep 3 | echo "Hello world."

sleep不向echo发送任何输出,它只在后端运行睡眠过程,echo命令的标准输出在屏幕上显示Hello world

但是在第二种情况下:当echo将标准输出发送到睡眠命令作为标准输入时我相信它不会接受它,因为睡眠只需要参数(数字值)让它知道它需要多少时间将睡眠过程放在一边,而且不要在屏幕上显示任何标准输出,以免在那里打印。

答案 1 :(得分:0)

两个命令之间的垂直条|称为管道。它告诉shell我们想要使用左边命令的输出作为右边命令的输入。

在您的示例中,sleepecho的输出无效。