Shell
使用 nohup 和管道重定向到文件問題
對於以下命令:
ssh -t esolve@hostname 'sudo nohup bash -c "ls > log 2>&1 &"'
我總是得到錯誤資訊:
nohup: ignoring input and appending output to `nohup.out'
為什麼會發生這種情況以及如何避免此錯誤資訊?
此外,在下面(我用它來啟用螢幕和文件的輸出),
stdbuf -o 0 command|& tee logfile
是乾什麼
&
用的?
碰巧您正在執行的命令
nohup
永遠不會寫入標準輸出或標準錯誤,並且您沒有向它發送任何輸入。但是nohup
沒有辦法知道,所以它告訴你任何輸入都將被丟棄,任何輸出都將被寫入nohup.out
.為避免這種情況,請將
nohup
的標準輸入、標準輸出和標準錯誤重定向到/dev/null
.ssh -t esolve@hostname 'sudo nohup bash -c "ls > log 2>&1 &" </dev/null >/dev/null 2>/dev/null'
至於
|&
,來自bash 手冊:管道的格式是
[time [-p]] [!] command1 [ [| or |&] command2 …]
管道中每個命令的輸出通過管道連接到下一個命令的輸入。也就是說,每個命令都讀取前一個命令的輸出。此連接在命令指定的任何重定向之前執行。
如果
|&
使用,標準錯誤通過管道command1
連接到標準輸入;command2
它是 的簡寫2>&1 |
。這是一個 bash 擴展,也存在於 zsh 中。