次のコマンドの場合:
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
実行中のコマンドがnohup
stdoutまたはstderrに書き込まず、入力を送信しないことがあります。ただし、nohup
これを知る方法がないため、すべての入力が削除され、すべての出力が記録されることがわかりますnohup.out
。
これを防ぐには、nohup
stdin、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
入力に接続されます。command2
2>&1 |
これはzshにも存在するbash拡張です。