【问题标题】:Bash: how to stop a loop when a specific key is pressed, such as Q?Bash:如何在按下特定键时停止循环,例如 Q?
【发布时间】:2019-04-02 22:29:18
【问题描述】:

我需要创建一个 while 循环,该循环不断循环,直到注册按键,特别是用于退出的 'q' 键。

这是我的(失败的)尝试:

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

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

干杯。

【问题讨论】:

标签: bash


【解决方案1】:

我是这样做的:

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

【讨论】:

    【解决方案2】:

    这是一个展示如何终止后台作业的示例

    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
    

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 2012-07-14
      • 2018-08-17
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      相关资源
      最近更新 更多