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

このアプローチの1つの注意点は、スクリプトがスリープモードであり、信号が放出されると、スクリプトがupdate再び「復帰」したときにコマンドが一度だけ実行されることです。

関連情報