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


111

2つのシェルスクリプトa.shとを作成しましたb.sh。ではa.shb.sh私はループの無限を持っていると、彼らはいくつかの端末に出力を印刷します。私は両方を呼び出す別のスクリプトを書きたいa.shb.sh私は、ユーザーがすぐに端末の制御を取り戻したい、ではなく無限にスクリプトの実行を持つのと私は、端末での出力を非表示にしたいです。

回答:


220

使用nohupあなたのバックグラウンドジョブが終了するのに長い時間がかかるか、あなただけのSecureCRTまたはそれがサーバにログインのようなものを使用している場合。

stdoutstderrをリダイレクトして、出力/dev/nullを無視します。

nohup /path/to/your/script.sh > /dev/null 2>&1 &

追加するだけで、スクリプトの引数がある場合があります。その場合、上記のコマンドはあいまいな出力リダイレクトを返します
sabertooth1990、2013年

私が見つけたより良い方法は、nohup /path/to/your/script.sh parameter1 > & 1 &誰かがより良い方法を知っている場合に使用することです。
sabertooth1990、2013年

17
すべてのSTDOUTおよびSTDERRストリームを自動的にnohup.outファイルに追加するため、/dev/null 2>&1使用nohupしている場合は必要ありません。使用するだけ:nohup /path/to/your/command &
Leonardo

1
@ sabertooth1990コマンドラインに誤りがあります:-bash: syntax error near unexpected token '&'
notes-jj

1
次に、作成したプロセスをどのようにして殺しますか?
Alexis_A

32

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

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

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

./a.sh > stdoutfile 2> stderrfile &

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

参照してくださいbashのmanページのリダイレクトの詳細については、を。


23

申し訳ありませんがこれは少し遅いですが、標準またはエラー出力を必要としない単純なコマンドの理想的な解決策を見つけました(それが原因であるクレジット:http : //felixmilea.com/2014/12/running-bash-commands-background -正しく/

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

command &>/dev/null &

2
注:コマンドは、ターミナルが閉じられると終了します。
バナナ

1
セッションを終了した後もコマンドを実行し続けるための解決策が必要な将来これを見る人には、screenまたはtmuxをお勧めします。最初のセッションを閉じた後も継続する「セッション内のセッション」を実行する必要があります。その後、再度ログインすると、進行中のセッションに再接続できます。たとえば、同期を長時間実行する必要があり、セッションを実行したままにしたくない場合など、rsyncバックアップの実行に最適です。
DanteAlighieri 2017年

13

それらが含まれているスクリプトと同じディレクトリにある場合:

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

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

> /dev/null 2>&1一部は必要ありません-それはあなたが出力のたくさんの騒々しいスクリプトでやりたいことがある、ターミナル上でそれらを参照してくださいする必要はありませんので、stdoutとstderrストリームリダイレクトします。


7

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

(&>/dev/null script.sh &)

これは、としても、バックグラウンドジョブのログを印刷していないことを唯一の答えである[1] + 54765 done <emacs>あなたに感謝
アルパース

2

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

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


0

これらの例は正常に動作します:

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

ループの場合、次のように使用できます。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.