在Bash IO重定向中等待子shell

Wait for the subshell in Bash IO redirection

场景是我需要在当前 shell 中使用我的主要命令 运行,这是必需的,否则会丢失所有环境内容等。

所以,我不能 运行 我的烟斗是这样的:

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

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

我必须 运行 当前 shell 的主要命令:

#command-line 2
mainCommand &> >(
  ...subshell commands...
) &

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

然而,在命令行 2 中,它只是一个命令,我不能只将它发送到后台,只有 subshell 应该转到后台,然后我才能得到它的 PID。

如何让

我有锁定文件的解决方案,但我更喜欢不使用文件作为整个脚本 运行 连续 writing/modifying 一个文件一次又一次就像穿透文件系统。

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

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

试试这个。您需要在子 shell 命令中添加 kill

sleep 100 &
export BACKGROUNDPID=$!

mainCommand &> >(
  ...subshell commands...
  kill "${BACKGROUNDPID}"
) &

wait ${BACKGROUNDPID}"

# execution continue here ...