나는 이 목표를 달성하려고 노력 중이야
while condition; do
var=value1
### update value every 5s
while sleep 5; do
var=value2
done
###
...
[ rest of code ]
done
여기서 문제는 스크립트가 항상 루프에 들어가 나머지 코드를 차단한다는 것입니다.
답변1
어느 정도 비동기식 변수 설정을 달성하기 위해 시도해 볼 수 있는 작업은 다음과 같습니다.
#!/usr/bin/env bash
async() {
while :; do
# send SIGUSR1 to "parent" script
kill -USR1 "$1"
sleep 1
done
}
# provide PID of script to async
async $$ &
async_pid=$!
declare -i i=0
update() {
i=42
}
cleanup() {
kill ${async_pid}
}
trap update USR1
trap cleanup EXIT
echo $i
sleep 2
echo $i
이 접근 방식의 한 가지 주의 사항은 스크립트가 절전 모드이고 신호가 방출되는 경우 update
스크립트가 다시 "깨어날" 때 명령이 한 번만 실행된다는 것입니다.