我有以下5秒计时器,每秒打印一个星号。
timer () {
i=1
trap 'i=5' INT
while [[ $i -le 5 ]]; do
sleep 1
printf "*"
((i+=1))
done
}
不知何故,陷阱块似乎有点hackish,我想知道是否有更正确的方法来中断整个循环(而不仅仅是当前的睡眠周期)。我试过了:
trap 'print "foo"' INT
在函数内部和外部的各个位置,但正如我之前提到的那样,它只会中断当前的睡眠周期。
答案 0 :(得分:0)
也许我错过了什么,但出了什么问题:
timer() {
i=0
while (( ++i <= 5 )); do
sleep 1
printf '*'
done
}
答案 1 :(得分:0)
这适用于bash:
#!/bin/bash
function timer {
trap "break" INT
i=0
while (( ++i <= 5 )); do
sleep 1
printf '*'
done
}
echo "Starting timer"
timer
echo "Exited timer"
echo "Doing other stuff...."
,这在ksh中(注意trap语句的不同位置):
#!/bin/ksh
function timer {
trap "break" INT
i=0
while (( ++i <= 5 )); do
sleep 1
printf '*'
done
}
echo "Starting timer"
timer
echo "Exited timer"
echo "Doing other stuff...."