场景是,我需要主命令在当前shell中运行,这是必需的,或者会丢失所有的环境内容,等等。
所以,我不能就这样操作我的管道:

#command-line 1
mainCommand | (
  ...subshell commands...
) &

#this wait works, but main command is in child process
wait $!

我必须在当前shell中运行main命令:
#command-line 2
mainCommand &> >(
  ...subshell commands...
) &

#this wait is waiting for mainCommand, not subshell
wait $!

但是,在命令行2中,它只是一个命令,我不能只将它发送到后台,只有子shell应该转到后台,然后我可以得到它的PID。
如何让
主命令在当前shell中
“wait”命令实际上是在等待子shell吗?
我有锁定文件的解决方案,但我不喜欢使用文件,因为整个脚本都是连续运行的,一次又一次地编写/修改文件就像穿透文件系统一样。

最佳答案

较新版本的bash允许等待进程替换,但在此之前,我建议只使用命名管道。

mkfifo p
( ... subshell commands ... ) < p &
mainCommand > p
wait

关于bash - 等待Bash IO重定向中的子Shell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52664029/

10-16 20:19