nohupとパイプラインにリダイレクトされたファイルの問題

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

& それは何のために使用されますか?

答え1

実行中のコマンドがnohupstdoutまたはstderrに書き込まず、入力を送信しないことがあります。ただし、nohupこれを知る方法がないため、すべての入力が削除され、すべての出力が記録されることがわかりますnohup.out

これを防ぐには、nohupstdin、stdout、stderrを/dev/null

ssh -t esolve@hostname 'sudo nohup bash -c "ls > log 2>&1 &" </dev/null >/dev/null 2>/dev/null'

に関しては|&バッシュマニュアル:

パイプの形式は次のとおりです。

[time [-p]] [!] command1 [ [| or |&] command2 …]

パイプラインの各コマンド出力は、次のコマンドの入力にパイプされます。つまり、各コマンドは前のコマンドの出力を読み込みます。この接続は、コマンドで指定されたリダイレクトの前に行われます。

使用すると、|&標準エラーは標準command1入力に接続されます。command22>&1 |

これはzshにも存在するbash拡張です。

関連情報