Bash 为什么不退出
在我看来,它应该打印“aaa”并退出,但它会停止,除非我按下回车按钮,为什么 ThxBash 为什么不退出,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,并扩
$(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的子进程