为什么 echo 不退出
Why echo not exit
echo aaa > >(echo $(cat))
在我看来,它应该打印 "aaa" 并退出,但除非我按下回车键,否则它会停止,为什么?
感谢
$(cat)
等同于
`cat`
命令。它运行 cat
并扩展到它的输出。
但没有任何参数 cat
(实际上是 /bin/cat
,参见 cat(1))正在读取 stdin 并将其复制到 stdout 直到文件结尾。
所以您的 shell 是 运行,所以正在等待您的输入。
shell是expanding的具体顺序。
它不会在完成之前等待您按回车键。该命令立即完成,但在下一个 shell 提示符后打印其输出。它看起来像:
barmar@dev:~$ echo aaa > >(echo $(cat))
barmar@dev:~$ aaa
这是因为shell不等待进程替换中的命令完成,它只是等待echo
命令完成。因此,它会在 echo
完成后立即打印下一个提示,然后 echo $(cat)
异步运行并打印其输出。
如果您此时键入另一个命令,它将起作用。它看起来很奇怪,因为输出是在提示后打印的。如果你想在自己的行上有一个新的提示,你只需要按 Enter。
echo aaa > >(echo $(cat))
在我看来,它应该打印 "aaa" 并退出,但除非我按下回车键,否则它会停止,为什么?
感谢
$(cat)
等同于
`cat`
命令。它运行 cat
并扩展到它的输出。
但没有任何参数 cat
(实际上是 /bin/cat
,参见 cat(1))正在读取 stdin 并将其复制到 stdout 直到文件结尾。
所以您的 shell 是 运行,所以正在等待您的输入。
shell是expanding的具体顺序。
它不会在完成之前等待您按回车键。该命令立即完成,但在下一个 shell 提示符后打印其输出。它看起来像:
barmar@dev:~$ echo aaa > >(echo $(cat))
barmar@dev:~$ aaa
这是因为shell不等待进程替换中的命令完成,它只是等待echo
命令完成。因此,它会在 echo
完成后立即打印下一个提示,然后 echo $(cat)
异步运行并打印其输出。
如果您此时键入另一个命令,它将起作用。它看起来很奇怪,因为输出是在提示后打印的。如果你想在自己的行上有一个新的提示,你只需要按 Enter。