web-dev-qa-db-ja.com

バックグラウンドでシェルスクリプトを実行し、出力を取得しない方法

2つのシェルスクリプトa.shとb.shを作成しました。 a.shとb.shには無限のforループがあり、端末に出力を出力します。 a.shとb.shの両方を呼び出す別のスクリプトを作成したいのですが、スクリプトを無限に実行するのではなく、ユーザーがすぐにターミナルの制御を取り戻し、ターミナルの出力を非表示にする必要があります。

94
Behnam Safari

バックグラウンドジョブの終了に時間がかかる場合、またはSecureCRTなどを使用してサーバーにログインする場合は、Nohupを使用します。

stdoutおよびstderr/dev/nullにリダイレクトして、出力を無視します。

Nohup /path/to/your/script.sh > /dev/null 2>&1 &
194
George

出力を次のようなファイルにリダイレクトします。

./a.sh > somefile 2>&1 &

これにより、stdoutとstderrの両方が同じファイルにリダイレクトされます。 stdoutとstderrを2つの異なるファイルにリダイレクトする場合、これを使用します。

./a.sh > stdoutfile 2> stderrfile &

Stdoutやstderrを気にしない場合は、/dev/nullをファイルの一方または両方として使用できます。

リダイレクトの詳細については bash manpage をご覧ください。

29
Adam Zalcman

申し訳ありませんが、これは少し遅れていますが、標準またはエラー出力が必要ないシンプルなコマンドの理想的なソリューションを見つけました(クレジット: http://felixmilea.com/2014/12/running-bash -commands-background-properly /

これにより、出力がnullにリダイレクトされ、画面が明確になります。

command &>/dev/null &
19
DanteAlighieri

以下を含むスクリプトと同じディレクトリにある場合:

./a.sh > /dev/null 2>&1 &
./b.sh > /dev/null 2>&1 &

最後の&は、スクリプトをバックグラウンドで実行させるものです。

> /dev/null 2>&1部分は必要ありません-stdoutおよびstderrストリームをリダイレクトするので、ターミナルでそれらを見る必要はありません。大量の出力を伴う騒々しいスクリプトの場合はそうすることができます。

12
Michael Chinen

サブシェルで実行して通知を削除し、STDOUTおよびSTDERRを閉じます。

(&>/dev/null script.sh &)
1
Tom Hale

これらの例は問題なく動作します:

Nohup sh prog.sh proglog.log 2>&1&

Forループは次のように使用できます:

{1..10}のi sh prog.shを実行します。睡眠1; done prog.log 2>&1&

バックグラウンドで動作し、出力は表示されません。

0
Ramin Ismayilli
Nohup sh -x runShellScripts.sh &
0
vaquar khan

Linuxキックスタートでスクリプトを実行する場合は、次のように実行する必要があります。

sh /tmp/script.sh > /dev/null 2>&1 < /dev/null &
0
SARATH CHANDRAN