重击:如何在按下特定键(例如Q)时停止循环?

时间:2018-10-29 22:32:48

标签: bash

我需要创建一个while循环,该循环不断循环直到注册了按键,尤其是退出的“ q”键。

这是我的尝试(失败):

while [ -z "$QUIT" ]
do
    <Script stuff>
done &
read -sn 1 QUIT
export QUIT

但是,如果按任意键,while循环不会退出/结束。这是因为$ QUIT似乎只能从其设置位置“向前”访问,而不能向后进入父while循环部分。有没有办法解决此问题,或者是一种替代方法,当按下某个键(如果可能的话)时,允许我的while循环退出?

干杯。

2 个答案:

答案 0 :(得分:0)

我是这样做的:

while true
do
    # Suck in characters until we timeout, collecting sequence
    seq=
    while IFS= read -s -n1 -t 0.01 key; do
        [ "$key" = "" ] && key=" "
        seq="${seq}${key}"
    done

    # Do whatever processing for seq

done

答案 1 :(得分:0)

这是一个显示如何杀死后台工作的示例

while true
do
    echo "hello"
    sleep 1
done &

while read -sn 1 QUIT && [[ $QUIT != 'q' ]];
do
    echo "QUIT $QUIT"
done

# This kills the background job
kill %1