Shell

使用 nohup 和管道重定向到文件問題

  • June 11, 2013

對於以下命令:

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 中。

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