私は次のスクリプトを持っています:
tail -f nohup.out
echo 5
Ctrl+Cを押すtail -f
と、スクリプトの実行が停止します5
。は印刷されません。echo 5
コマンドを停止した後、どうすればコマンドを実行できtail
ますか?
Ctrl+ SIGINTシグナルをフォアグラウンドプロセスグループC内のすべてのプロセスに送信します。の実行中、プロセスグループは、スクリプトを実行するプロセスとシェルで構成されます。tail
tail
ビルトインを使用してtrap
、信号のデフォルトの動作をオーバーライドします。
trap " " INT
tail -f nohup.out
trap - INT
echo 5
echo 5
トラップのコードは何も実行しないため、シェルがSIGINTを受信すると、シェルは次のコマンド()に進みます。最初の行の引用符の間にスペースがあることに注意してください。シグナルを完全に無視することを意味する空の文字列を除いて、何もしないシェルコードは何もしません(シグナルもtail
無視するため、これは使用できません)。2番目の呼び出しtrap
はデフォルトの動作を復元し、3行目以降にCtrl+Cがスクリプトを再び中断するようにします。
#!/bin/bash
trap "echo 5" SIGINT SIGTERM
tail -f nohup.out
tail
次のように、新しいシェルでを開始できます。
#!/bin/bash
bash -i -c 'tail -f nohup.out'
echo 5
rwosで述べたように、インライントラッピングを追加します。
bash -i -c "trap ' ' SIGINT; tail -F '$1'; trap - SIGINT"
これは、後続のSIGINTシグナルを発行するときにパテセッションを閉じなくても機能します(これが私の問題でした)
bashでは、1つのアンパサンドで行を終了して、コマンドをバックグラウンドで非同期的に実行します。
tail -f nohup.out &
File:Tail in perlを検索し、これをさまざまなプロジェクトで数回使用して、ログのテーリングを自動化し、ログ出力に対して特定のアクションを実行しました。
google ftp-upload-mon file:Tail to tail-fxferlogsを使用するsourceforgeにアップロードしたプロジェクト