Bash
讓 nohup 附加到 ’nohup.out’ 和明確地將其重定向到文件有什麼區別?
考慮以下場景:
tail.sh :
#!/bin/bash tail -f test.txt
invoke.sh :
#!/bin/bash nohup ./tail.sh &
invoke_explicitredirect.sh :
#!/bin/bash nohup ./tail.sh > out.log &
在終端中執行兩者俱有相同的效果:
- 執行後我重新控制了終端
./tail.sh
tail
終端上沒有輸出但是,當使用
ssh
(例如ssh <user>@<hostname> "<script>"
)執行它時:
invoke_explicitredirect.sh
將控制權返回ssh
(並終止)invoke.sh
掛起,直到我發送一個SIGINT
man nohup
如果可能的話,nohup
將自動將輸出重定向到“nohup.out”的狀態:If standard output is a terminal, append output to 'nohup.out' if possible, '$HOME/nohup.out' otherwise.
nohup
讓附加到nohup.out
和顯式重定向輸出有什麼區別?
當您通過 ssh 遠端啟動命令時,標準輸出不是終端。使用
-t
選項 withssh
來獲得與您的兩個命令相同的行為。有關 ssh 和 nohup 的更多詳細資訊:http://snailbook.com/faq/background-jobs.auto.html(取自 wiki 頁面:https ://en.wikipedia.org/wiki/Nohup )