7

私は次のスクリプトを持っています:

tail -f nohup.out
echo 5

Ctrl+Cを押すtail -fと、スクリプトの実行が停止します5。は印刷されません。echo 5コマンドを停止した後、どうすればコマンドを実行できtailますか?

4

6 に答える 6

10

Ctrl+ SIGINTシグナルをフォアグラウンドプロセスグループC内のすべてのプロセスに送信します。の実行中、プロセスグループは、スクリプトを実行するプロセスとシェルで構成されます。tailtail

ビルトインを使用してtrap、信号のデフォルトの動作をオーバーライドします。

trap " " INT
tail -f nohup.out
trap - INT
echo 5

echo 5トラップのコードは何も実行しないため、シェルがSIGINTを受信すると、シェルは次のコマンド()に進みます。最初の行の引用符の間にスペースがあることに注意してください。シグナルを完全に無視することを意味する空の文字列を除いて、何もしないシェルコードは何もしません(シグナルもtail無視するため、これは使用できません)。2番目の呼び出しtrapはデフォルトの動作を復元し、3行目以降にCtrl+Cがスクリプトを再び中断するようにします。

于 2012-08-14T13:07:48.203 に答える
1
#!/bin/bash
trap "echo 5" SIGINT SIGTERM
tail -f nohup.out
于 2012-08-14T12:02:00.073 に答える
0

tail次のように、新しいシェルでを開始できます。

#!/bin/bash
bash -i -c 'tail -f nohup.out'
echo 5
于 2012-08-14T13:31:43.060 に答える
0

rwosで述べたように、インライントラッピングを追加します。

bash -i -c "trap ' ' SIGINT; tail -F '$1'; trap - SIGINT"

これは、後続のSIGINTシグナルを発行するときにパテセッションを閉じなくても機能します(これが私の問題でした)

于 2016-04-12T07:52:11.903 に答える
0

bashでは、1つのアンパサンドで行を終了して、コマンドをバックグラウンドで非同期的に実行します。

tail -f nohup.out &
于 2020-08-21T00:17:22.010 に答える
-1

File:Tail in perlを検索し、これをさまざまなプロジェクトで数回使用して、ログのテーリングを自動化し、ログ出力に対して特定のアクションを実行しました。

google ftp-upload-mon file:Tail to tail-fxferlogsを使用するsourceforgeにアップロードしたプロジェクト

于 2012-08-14T15:37:16.610 に答える