スクリプトの実行時にテールログに機能を追加しますか?

スクリプトの実行時にテールログに機能を追加しますか?

私は非常に短いスクリプトを持っています。

    loading_animation &
    LOADING_ANIMATION=$!
    trap "kill -9 $LOADING_ANIMATION" `seq 0 15`
    task_to_be_performed
    echo "Script Complete"

スクリプトはこれより少し長いですが、よくまとめられています。

スクリプトの実行中(アニメーションが表示されている間)[L]キーを押すと、アニメーションが停止し、task_to_be_performedが完了するまでログ表示が開始されるように機能を追加する方法はありますか?

デフォルトでは[L]を押すと、tail -f /var/log/messagestask_to_be_performedが完了したときにアニメーションが停止、開始、停止されるようにし、[スクリプトの完了]をエコーし​​てスクリプトを完全に終了します。

私は理解できません。

ベストアンサー1

#! /bin/bash
loading_animation &
ani_pid=$!
trap "kill -9 $ani_pid" 0
trap 'done=yes' USR1
output=ani
( task_to_be_performed; kill -USR1 $$) &
while true; do
    read -s -n 1 -t 1 input
    if [ ani = "$output" ] && [ l = "$input" ]; then
        output=log
        kill "$ani_pid"
        tail -f /var/log/messages &
        tail_pid=$!
        trap "kill -9 $tail_pid" 0
    fi
    if [ "$done" = yes ]; then
        kill -9 $tail_pid
        break
    fi
done
echo "Script Complete"

おすすめ記事