나는 매우 짧은 대본을 가지고 있습니다.
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/messages
task_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"