所以我正在阅读this文章,了解shell命令如何比hadoop集群更快更快地处理大量数据。
我在数据管道中读到,并行处理shell命令。
我试过
sleep 3 | echo "Hello world."
打印Hello World并进入睡眠模式,该模式在3s后退出
但是当我这样做的时候,
echo "Hello World" | sleep 2
刚进入睡眠状态。 Hello World未打印
任何人都可以向我解释为什么会这样吗? 如果命令是并行执行的,那么Hello World是否应该以任何方式打印?
答案 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我们想要使用左边命令的输出作为右边命令的输入。
在您的示例中,sleep
对echo
的输出无效。