Bash - 特定のキーが押されるのを待っている間に無限の操作を実行します。可能ですか?

Bash - 特定のキーが押されるのを待っている間に無限の操作を実行します。可能ですか?

do_some_simple_jobbashには、10分ごとに実行される次の無限ループがあります。

while true
do

    do_some_simple_job

    sleep 600

done

このジョブの実行中に、スクリプトがジョブをキャンセルするがスクリプトを終了しないなど、いくつかのキーストロークを許可するようにしたいと思います。これは可能ですか?

ベストアンサー1

はい、可能です。

#!/bin/sh

sigint_handler () {
    echo "Killing the job ($job_pid)"
    kill $job_pid
}

while true; do
    some_simple_job & job_pid=$!
    trap 'sigint_handler' INT

    echo "Job started ($job_pid)"

    wait
    trap - INT

    echo "Job finished, waiting 10 minutes..."

    sleep 600
done

このスクリプト(および他の互換性のあるシェルでもsh動作します)には無限ループが含まれています。バックグラウンドで作業を開始した後にインストールされます。bashksh93信号ハンドラ、スクリプトが特定の信号をキャプチャするたびに実行する必要がある小さなルーチンです。キャプチャした信号はINT(割り込み)信号で、Ctrl+を押して送信できますC

スクリプトはタスクが完了するのを待ってから10分間待ちます(スクリプトと同様)。ロックする前にシグナルハンドラをアンロードするので、Ctrl+interruptスクリプトを使用できますC

ジョブの実行中に信号が受信されると、シグナルハンドラはINTそのプロセスIDを使用してジョブを終了します。その後、スクリプトはハンドラをアンロードし、スリープモードに切り替えます。

10分のスリープ期間中にスクリプトを終了しないと、ループは引き続き作業を開始し、ハンドラーを再インストールします。

おすすめ記事