如何在脚本运行时更改bash脚本输出?

如何在脚本运行时更改bash脚本输出?

我有以下从 0 到 99 计数的循环:

    #!/bin/bash

for ((i=0;i<100;i++));
do
   echo $i
   sleep 1
done

有没有办法在循环脚本运行时更改终端输出的结果。假设我按字母 k,循环会自动在当前数字的基础上再添加 10 个数字,因此,如果屏幕上显示 10,并且按 K,循环应自动更改为 20!谢谢

答案1

正如评论中提到的,您可以使用:

read -t 1 -n 1 key

由于-t我们可以删除选项sleep,因此您的脚本可以是:

#!/bin/bash

for ((i=0; i<100; i++)); do
    read -t 1 -n 1 key
    if [ "$key" = "k" ]; then
        i=$((i + 10))
    fi
    echo $i
done

但我认为更便携的可能是:

#!/bin/bash

if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi

keystroke=''
i=0
while [ $i -lt 100 ]; do
    keystroke="$(dd bs=1 count=1 2>/dev/null)" # http://www.tldp.org/LDP/abs/html/
    if [ "$keystroke" = "k" ]; then
        i=$(( i + 10 ))
    elif [ "$keystroke" = "q" ]; then
        break
    fi
    i=$(( i + 1 ))
        echo $i
    sleep 1 
done

if [ -t 0 ]; then stty sane; fi

exit 0

相关内容