nohupコマンドを使用した標準入力入力

nohupコマンドを使用した標準入力入力

~からhttp://www.gnu.org/software/coreutils/manual/html_node/nohup-inplication.html

nohupは指定されたコマンドを実行し、ログアウト後もコマンドがバックグラウンドで実行され続けるように切断信号を無視します。

要約:nohup command [arg]...

標準入力が端末の場合は、端末セッションでコマンドがその端末を使用するためのものであると誤って考えないようにリダイレクトします。

  1. 私たちがこれをしなければならない理由:

    誤って標準入力から読み取ろうとするコマンドがエラーを報告できるように、代替ファイル記述子を読み取れないようにします。

  2. ファイルの標準入力をリダイレクトしませんか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/nullie 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 

関連情報