为什么回声不退出

时间:2017-06-01 07:46:10

标签: bash echo pipeline

echo aaa > >(echo $(cat))

在我看来,它应该打印“aaa”然后退出,但是除非我按下回车键,否则它会停止,为什么?

THX

2 个答案:

答案 0 :(得分:8)

它不是等你在完成之前按Enter键。该命令立即完成,但在下一个shell提示符后打印其输出。它看起来像:

barmar@dev:~$ echo aaa > >(echo $(cat))
barmar@dev:~$ aaa

这是因为shell不等待进程替换中的命令完成,它只是等待echo命令完成。因此,只要echo完成,它就会打印下一个提示,然后echo $(cat)以异步方式运行并打印其输出。

如果此时键入另一个命令,它将起作用。它看起来很奇怪,因为输出是在提示后打印的。如果您想在自己的行上有新提示,则只需按 Enter

答案 1 :(得分:2)

$(cat)

相同
`cat`

命令。它运行cat并扩展到其输出。

但没有任何参数cat(实际上/bin/cat,请参阅cat(1))正在阅读 stdin 并将其复制到 stdout 直到文件结束。

所以你的shell正在运行,所以等待你的输入。

shell按特定顺序为expanding