Bash

嵌套 nohup 錯誤處理輸出

  • May 21, 2019

我有一個 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 為空。

為什麼會這樣?我怎樣才能改變這種行為?

你的 nohup 不是說“將標準錯誤重定向到標準輸出”嗎?

這正是發生的事情。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 否則。

如果標準錯誤是終端,則將其重定向到標準輸出。

引用自:https://unix.stackexchange.com/questions/520195