~からhttp://www.gnu.org/software/coreutils/manual/html_node/nohup-inplication.html
nohupは指定されたコマンドを実行し、ログアウト後もコマンドがバックグラウンドで実行され続けるように切断信号を無視します。
要約:
nohup command [arg]...
標準入力が端末の場合は、端末セッションでコマンドがその端末を使用するためのものであると誤って考えないようにリダイレクトします。
私たちがこれをしなければならない理由:
誤って標準入力から読み取ろうとするコマンドがエラーを報告できるように、代替ファイル記述子を読み取れないようにします。
ファイルの標準入力をリダイレクトしませんか
nohup command [arg]... 0<myfile
?なぜ0>/dev/null
?このリダイレクトはGNU拡張です。 GNU以外のホストに移植可能に設計されたプログラムを使用できます
nohup command [arg]... 0>/dev/null
。
答え1
nohupを使って複雑なスクリプトを実行しようとしていると想像してください。 stdinを読み取れないファイル記述子にリダイレクトして、stdinを読み取ろうとするかどうかを検出できます。次の2つの例を見てください。最初0</dev/null
:
rm nohup.out
nohup sh -c 'head -1' 0</dev/null
echo $?
cat nohup.out
nohup.outファイルは空で、スクリプトの戻りコード($?
)は0です。これは、スクリプトがファイルの終わりのみを読み取ったため、大丈夫です。次に、0>/dev/null
ie 0を使用して同じスクリプトを開いてみてください。出力のみ:
rm nohup.out
nohup sh -c 'head -1' 0>/dev/null
echo $?
cat nohup.out
nohup.outにエラーメッセージが表示されます。
head: error reading 'standard input': Bad file descriptor
終了コードは 1 で失敗しました。これはあなたにとってより便利です。以下を使用してstdinをオフにして同じ効果を得ることもできます0<&-
。
rm nohup.out
nohup sh -c 'head -1' 0<&-
echo $?
cat nohup.out