Bash에서 비동기 명령 간격을 설정하는 방법은 무엇입니까?

Bash에서 비동기 명령 간격을 설정하는 방법은 무엇입니까?

나는 이 목표를 달성하려고 노력 중이야

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스크립트가 다시 "깨어날" 때 명령이 한 번만 실행된다는 것입니다.

관련 정보