bash:包含分叉进程的脚本在通过反引号执行时挂起

bash: script containing forked process hangs when executed via backtick

我的总体目的是能够 运行 脚本 t1.sh,它启动一个程序,该程序将在脚本完成后持续存在(本例中为计算器)。 t1.sh 然后回显关联的 PID,然后可以在其他脚本 t2.sh 中使用,该脚本调用 t1.sh.

这个问题出现在一个更大的脚本中,但我想我已经将它隔离到下面。

t1.sh:

#!/bin/bash
gnome-calculator &
PID=$!
echo $PID

运行 ./t1.sh 启动计算器,立即吐出pid,并给出新的提示。
但是,运行ning A=$(./t1.sh)(或带反引号),脚本似乎 "hang" 直到计算器 window 关闭。此脚本相同,t2.sh:

#!/bin/bash
B=$(./t1.sh)
echo $B

在计算器 window 关闭之前,不会回显任何内容。

我的问题是:

  1. 为什么会这样,
  2. 你是如何预防的?

在此先感谢您的智慧之言。

发生这种情况是因为捕获表达式正在等待标准输入关闭。如果重写脚本

#!/bin/bash
gnome-calculator >/dev/null &
PID=$!
echo $PID

你应该很好。