web-dev-qa-db-ja.com

スクリプトを終了するときにbashスクリプトのバックグラウンドプロセスを強制終了する

ファイルをtailするスクリプトがあります右上隅に時計を表示している間。私はインターネットから時計の部分を取りました、そしてそれは大丈夫です。スクリプト全体は次のようなものです(私は単純化しました):

while sleep 1; do tput sc; tput cup 0 $(($(tput cols)-29)); date; tput rc; done &
tail -f mylog.log

すべて正常に動作しますが、問題はスクリプトを停止したときCTRL+Cを使用すると、コンソールで時計が引き続き実行されます(残りのbashプロセスを手動で強制終了するまで)。したがって、スクリプトを終了したときにそのプロセスを停止する方法はありますか?

以下のコードを試しましたが、機能しません。

while sleep 1; do tput sc; tput cup 0 $(($(tput cols)-29)); date; tput rc; done &
CLOCK_PID=$!
tail -f mylog.log
kill -9 $CLOCK_PID

CTRL+Cをbashにトラップする方法を検索しましたが、それが正しい方法かどうかわかりません...

4
lorenzo-s
CLOCK_PID=$!
trap 'kill -9 $CLOCK_PID' EXIT
tail -f mylog.log
3
Hauke Laging

たぶんwatchはあなたのニーズに合うでしょう。デフォルトでは現在の時刻が出力されます。何かのようなもの:

$ watch tail -n 30 /var/log/syslog

0
blujay