Bash 为什么不退出

Bash 为什么不退出,bash,echo,pipeline,Bash,Echo,Pipeline,在我看来,它应该打印“aaa”并退出,但它会停止,除非我按下回车按钮,为什么 Thx$(cat)与 echo aaa > >(echo $(cat)) 指挥部。它运行cat,并扩展到其输出 但是在没有任何参数的情况下,cat(实际上是/bin/cat,请参阅)正在读取stdin并将其复制到stdout中,直到文件结束 您的shell正在运行,等待您的输入 外壳按特定顺序排列。$(cat)与 echo aaa > >(echo $(cat)) 指挥部。它运行cat,并扩

在我看来,它应该打印“aaa”并退出,但它会停止,除非我按下回车按钮,为什么

Thx

$(cat)

echo aaa > >(echo $(cat))
指挥部。它运行
cat
,并扩展到其输出

但是在没有任何参数的情况下,
cat
(实际上是
/bin/cat
,请参阅)正在读取stdin并将其复制到stdout中,直到文件结束

您的shell正在运行,等待您的输入

外壳按特定顺序排列。

$(cat)

echo aaa > >(echo $(cat))
指挥部。它运行
cat
,并扩展到其输出

但是在没有任何参数的情况下,
cat
(实际上是
/bin/cat
,请参阅)正在读取stdin并将其复制到stdout中,直到文件结束

您的shell正在运行,等待您的输入


shell是按特定顺序排列的。

它不会等待您在完成之前按enter键。命令立即完成,但其输出将在下一个shell提示后打印。它看起来像:

`cat`
这是因为shell不等待流程替换中的命令完成,它只等待
echo
命令完成。因此,它在
echo
完成后立即打印下一个提示,然后
echo$(cat)
异步运行并打印其输出


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

它不会等您按Enter键就完成了。命令立即完成,但其输出将在下一个shell提示后打印。它看起来像:

`cat`
这是因为shell不等待流程替换中的命令完成,它只等待
echo
命令完成。因此,它在
echo
完成后立即打印下一个提示,然后
echo$(cat)
异步运行并打印其输出



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

echo aaa-应打印aaa,然后exit@ArvindDhakad但是它正在重定向到流程替换。echo aaa-应该打印aaa,然后exit@ArvindDhakad但它正在重定向到进程替换。进程替换意味着它应该从
echo aaa
。那么
echo aaa>>(echo$(cat))
这在我的ubuntu 16.04中工作没有任何问题,它打印aaa。想知道为什么?我想问题是为什么它在打印后等待输入而不是立即退出…-出于某种原因,它会执行给定的任何输入,请尝试:
echo-e“aaa”>>(echo$(cat))
,键入
ls/tmp
,输入…对我来说,我没有按enter退出。我只是复制粘贴了代码,它打印出
aaa
,然后优雅地退出,这就是为什么有点混乱。顺便说一句,barmar回答解释了为什么:)进程替换意味着它应该从
echo aaa
获取输入。嗯
echo aaa>(echo$(cat))
这在我的ubuntu 16.04中工作没有任何问题吗?它打印aaa。想知道为什么?我想问题是为什么它在打印后等待输入而不是立即退出…-出于某种原因,它会执行给定的任何输入,请尝试:
echo-e“aaa”>>(echo$(cat))
,键入
ls/tmp
,输入…对我来说,我没有按enter退出。我只是复制粘贴了代码,它打印出
aaa
,然后优雅地退出,这就是为什么有点混乱。顺便说一句,barmar回答解释了原因:)添加
;等等之后将等待最后一个进程termination@NahuelFouilleul只等待使用
创建的后台进程
echo aaa>>(echo$BASHPID;sleep 1;echo$(cat));echo$!;等等
@NahuelFouilleul否,它包含最后一个后台进程的PID。我得到一个错误:
bash:wait:PID 8849不是这个shell的子进程添加
;等等之后将等待最后一个进程termination@NahuelFouilleul只等待使用
创建的后台进程
echo aaa>>(echo$BASHPID;sleep 1;echo$(cat));echo$!;等等
@NahuelFouilleul否,它包含最后一个后台进程的PID。我得到一个错误:
bash:wait:PID 8849不是这个shell的子进程