bash:包含分叉进程的脚本在通过反引号

时间:2015-12-09 18:21:37

标签: bash fork

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

此问题出现在一个更大的脚本中,但我认为我已将其与以下内容隔离开来。

t1.sh:

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

运行./t1.sh启动计算器,立即吐出pid,然后给出新的提示 但是,运行A=$(./t1.sh)(或使用反引号),脚本似乎是"挂起"直到计算器窗口关闭。对于此脚本,t2.sh:

也是如此
#!/bin/bash
B=$(./t1.sh)
echo $B

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

我的问题是:

  1. 为什么会这样,
  2. 你如何阻止它?
  3. 提前感谢任何智慧的话语。

1 个答案:

答案 0 :(得分:3)

它正在发生,因为捕获表达式正在等待标准输入关闭。如果你重写脚本

private void grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
    //text.Text = grid.Width.ToString();
    Dispatcher.BeginInvoke(new Action(() => text.Text = grid.Width.ToString()));
}

你应该好。