我有一个 bash 脚本 A(即 scripta.sh),它执行另一个 bash 脚本 B(即 scriptb.sh),运行其他命令。
A:
# Cool logic
scriptb.sh &
乙:
# Cool logic
nohup python3 app.py >> app.log &
当我运行时nohup scripta.sh >> a.log &
,我将 A 和 app.py 的输出都放入 a.log 中,而 app.log 为空。
为什么会发生这种情况?我怎样才能改变这种行为?
答案1
你的 nohup 不是说“将 stderr 重定向到 stdout”吗?
这正是发生的事情。nohup scripta.sh >> a.log &
将 stderr 重定向到a.log
(因为当您从交互式 shell 运行命令时,stderr 是一个 tty),然后第二个nohup python3 ..
fromscriptb.sh
不必再这样做(因为它的 stderr 不是 tty,而是a.log
),并且 stderr的python3 ...
去了a.log
.
这就是联机帮助页所说的nohup(1)
:
如果标准输入是终端,则从不可读的文件重定向它。
如果标准输出是终端,
nohup.out
则尽可能将输出附加到终端,$HOME/nohup.out
否则。如果标准错误是终端,将其重定向到标准输出。