在Bash中运行时按下键时更改脚本输出

时间:2015-03-24 01:31:24

标签: linux bash

有没有办法在脚本运行时更改输出? 假设我有一个名为"数字"它正在运行。该脚本使用此循环打印1到49之间的数字:

for ((a=1; a<50; a++))
do
     echo $a
     sleep 1
done

如何在循环运行时更改此循环的输出?让我们说如果我在跑步过程中按a或b,它应该从结果中减去1。

1 个答案:

答案 0 :(得分:2)

如评论中所述,在如此短的时间内没有时间做任何事情。但如果我让跑步越来越慢,我就可以展示类似于你所要求的东西。

declare -i a b c # Ensure these values are treated as integers
b=1
for ((a=0; a < 10**6; a+=b)); do
    read -s -N1 -t.3 c && b=c
    printf '%d...' "$a"
done
echo

read参数的细分:

read -s   # Don't echo output
     -N1  # Read one character of input*
     -t.3 # Wait for .3 seconds before giving up
     c &&
b=c # If read was successful, assign value to c, then b

这里有些疯狂。享受:

declare -i a b
b=1
for ((a=0; a < 10**6; a+=b)); do
    if read -s -N1 -t.01 c; then
        case $c in
            j) b=b+1;;
            k) b=b-1;;
        esac
    fi
    printf '%d...' "$a"
done
echo

*我注意到bash v3似乎使用read -n1和v4 read -N1