2011-07-15 13 views
3

シェルでいくつかのタスクを実行したい。シェル:バックグラウンドで実行中のファイルの末尾を作る方法

  1. 尾新しいファイルにファイル:他のタスクを実行すると同時に、tail -f debug|tee -a test.log
  2. 、:例えば。

私の質問は:コマンドをtail -f debug|tee -a test.logのバックグラウンドで実行すると、シェルスクリプトで他のタスクを実行できるようになりますか?

+1

通常、2番目のウィンドウ/端末を使用するのが最も簡単です。ログ出力が画面にも表示されている間にコマンドを入力することは、私の経験上、不満足な体験です。 –

+0

@Jonathan Leffler、あなたの助言に感謝します。はい、私はそれが同じ画面でログ出力中にコマンドを入力するのは本当にイライラの経験だと思います。 – zhaojing

答えて

5

あなただけのシェルの組み込み追記演算子を使用し、すべてで、このためのTシャツを必要としない:シェルで通常どおり

tail -f debug >> test.log & 

末尾&作品。あなたは出力をファイルに送るだけでなく、標準出力も必要になります。バックグラウンドであれば、おそらくあなたが望むものではありません。

+0

悪い、あなたの応答のためにありがとう:-) – zhaojing

+1

これと 'tee'を使ったコードとの違いは、デバッグ出力を端末に送信しないということです。 –

+0

@Jonathan Leffler、応答のおかげで、私はそれについてははっきりしています。 – zhaojing

4

通常、何かをバックグラウンドにする場合は、コマンドの後ろにアンパサンドを使用するだけです。

tail -f debug|tee -a test.log & 

次に、fgと入力してフォアグラウンドに戻すことができます。これはあなたの質問に答えましたか、あなたが求めていたことを逃しましたか?

+0

Jason、あなたの応答に感謝します。私は試してみる:-) – zhaojing

1

これを行う簡単な方法は次のとおりです。

screen -R -D 
tail -f debug|tee -a test.log 
Ctrl-A c 
ps ax |grep tail 
Ctrl-A [Backspace] 
... 
Ctrl-A [Spacebar] 

screenを使用すると、1つの端末の接続で複数の端末セッションを実行できます。 Ctrl-A [Backspace] | [Space]で前後に切り替えます。別の別のシェルを作成するにはCtrl-A c

画面の大きな利点は、端末セッションが切断されるとすべての実行を維持することです。ターミナルウィンドウを閉じるか、sshを切断して別のコンピュータに移動し、ログインしてscreen -R -Dを実行して、まだ実行中のものすべてに再接続してください。

あなたはたまにしかこれが必要な場合は、単に実行尾、タイプはCtrl-Zは、その後、fg %1はフォアグラウンドに戻す尾のプロセスをもたらすために、またはbg %1は、それが永続的にバックグラウンドで実行するために、コマンドを実行します。 Ctrl-Zを使用すると、jobsコマンドは、すべての分離ジョブを表示します。

関連する問題