tail -fでデフォルトスクリプトを返す方法

tail -fでデフォルトスクリプトを返す方法

kshログファイルの表示に使用するスクリプトがありますtail -f

tailプロセスを終了して基本スクリプトを実行し続けるにはどうすればよいですか?

私はこれをAIX 7.1で実行しています。
- - - - - - - - - - - - - - - - - - - - - - - - -編集 - - ----------------------- - -------
Gilesの答えに基づいて、スクリプトで次のことを試しました。

trap 'echo "tail process terminated!"' 2
tail -f mylog.log
trap - 2

これで、tailコマンドを実行した後にCtrl + Cを押すと、tailプロセスが終了し、スクリプトが実行され続けます。しかし、新しい問題は、Ctrl + Cをもう一度押すとスクリプトが終了しないことです。誰でも助けることができますか?

答え1

tailスクリプトがコマンドをバックグラウンドに設定しないと、シェルはコマンドが終了するのを待ちますが、これは決して発生しません。

別の操作を実行する必要があり、tail後でコマンドを終了したい場合は、次のことができます。

tail -f logfile &
tailpid=$!
...do some other stuff...
kill $tailpid
...carry on...

答え2

ポイントtail -fは、明示的に終了するまで永久に実行されるため、終了をスケジュールする必要があります。

tailプロセスの終了時期を決定するロジックがある場合は、プロセスIDを取得し、tail必要に応じて終了をトリガーする準備をします。たとえば、1分後に終了するには、次のようにします。

tail -f file.log &
tail_pid=$!
sleep 60
kill $tail_pid
do_more_stuff

tailユーザーが+を押すCtrlとシェルスクリプトを終了しますが、終了しない場合はCこれ知能を知らせる信号。tail空の文字列は子プロセスと呼び出しシェルがSIGINTを無視するため、トラップを空でない文字列(NULL以外の値、空白も可能)に設定する必要があります。

trap : INT       # set a signal handler for SIGINT that does nothing
tail -f file.log
do_more_stuff    # executed when tail is killed, e.g. by the user pressing Ctrl+C
trap - INT       # reset SIGINT to killing the script

関連情報