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

Linux 无法从另一个bash脚本在后台执行bash脚本,linux,bash,shell,ubuntu,background,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.s

我有一个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&


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

这就是您想要的:

  • 脚本运行并输出内容
  • 脚本在后台运行命令
  • 脚本退出
  • 管子关上了
  • tee
    退出
  • 这就是正在发生的事情:

  • 脚本运行并输出内容
  • 脚本在后台运行命令,管道作为stderr
  • 脚本退出
  • 管道仍由background命令保持打开状态
  • tee
    从不退出
  • 您通过将stderr指向日志文件而不是管道来修复它,这样后台进程就不再保持管道打开


    2>&1
    的顺序和重定向的含义已经确定,并且会自动在代码中指出此问题。

    它没有卡住,只需按enter键。否。它卡住了。我所说的卡住是指它等待第二个脚本完成。显然,按enter键将在标准输出处插入新行,但它不是第一个脚本中的新行。请尝试此nohup命令:
    nohup bash b.sh>/tmp/log 2>&1&
    成功了!谢谢。但我仍然无法理解为什么会发生这种情况。当同一行出现在单独的脚本中时(没有其他行),为什么它在那里工作而不是在这里。有什么建议吗?不知道从哪个脚本你工具它,但我已经为你提供了正确的语法itThanks!这正是我需要的。以后会处理订单的。