我正在努力实现这个目标
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
当脚本再次“唤醒”时,该命令仅执行一次。