无法在后台执行另一个bash脚本的bash脚本

时间:2014-05-07 14:26:17

标签: linux bash shell ubuntu background

我有一个shell脚本,我想在后台调用另一个shell脚本。这两个脚本都是bash脚本 第一个脚本(a.sh)类似于:

read a
echo 'something'
read b
echo 'something else'
# some if else conditions
nohup bash b.sh 2>&1 > /tmp/log &

当我尝试执行上述脚本时:./a.sh arg1 arg2 | tee log ,非常奇怪的是,它在第​​二个脚本b.sh的nohup行停留,但它不应该完成。

但是当我 在脚本中有以下行时,它按预期工作:
nohup bash b.sh 2>&1 > /tmp/log &

请帮忙。如果需要,我也可以分享确切的脚本。

1 个答案:

答案 0 :(得分:2)

这就是你想要发生的事情:

  1. 脚本运行并输出内容
  2. 该脚本在后台运行命令
  3. 脚本退出
  4. 管道关闭
  5. tee退出
  6. 这就是发生的事情:

    1. 脚本运行并输出内容
    2. 该脚本在后台运行命令,管道为stderr
    3. 脚本退出
    4. 管道仍然由后台命令
    5. 打开
    6. tee永不退出。
    7. 通过将stderr指向日志文件而不是管道来修复它,以便后台进程不再使管道保持打开状态。

      2>&1的顺序和重定向的含义为explained in other answers,而shellcheck会在您的代码中自动指出此问题。

相关问题