Bash
嵌套 nohup 錯誤處理輸出
我有一個 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
否則。如果標準錯誤是終端,則將其重定向到標準輸出。