Bash - 使用特定键暂停和恢复脚本(for 循环)

Bash - 使用特定键暂停和恢复脚本(for 循环)

我在脚本中使用以下计数器功能:

for ((i=1; i <= 100; i++ )); do
    printf "\r%s - %s" "$i" $(( 100 - i ))
    sleep 0.25
done

有没有办法可以通过键盘输入暂停和恢复计数器?
(最好使用相同的密钥 - 让我们说使用space

答案1

使用read超时-t并根据其输出设置变量。

#!/bin/bash

running=true

for ((i=1; i <= 100; i++ )); do
    if [[ "$running" == "true" ]]; then
        printf "\r%s - %s" "$i" $(( 100 - i ))
    fi

    if read -sn 1 -t 0.25; then
        if [[ "$running" == "true" ]]; then
            running=false
        else 
            running=true
        fi
    fi
done

这样,您可以按任意键暂停或取消暂停脚本。

running存储 true 或 false 来判断我们是否希望循环工作或现在工作。read -sn 1 -t 0.25是按键,它读取一个字符-n1,它抑制按键-s并仅等待 0.25 秒-t 0.25。如果read超时,它会返回 none 0 退出状态,我们可以使用 检测到该状态,if并且只有按下某个键时,我们才会切换运行状态。

您还可以将读取的字符分配给变量并检查特定字符以将其限制为仅一个键。

    if read -sn 1 -t 0.25 key && [[ "$key" = "s" ]] ; then

"$key" == ""如果您想检查空间或输入,请使用。

请注意,读取+超时的一个副作用是,如果您按下某个键,则下一个循环将比正常执行得更快,如果您按住某个键,这一点会更加明显。

另一种方法可能是使用作业流程控制。ctrl + s将暂停终端并ctrl + q恢复它。这会阻止整个 shell,并且不适用于所有 shell。您可以使用ctrl + z暂停进程来提示您返回,然后使用fg再次恢复该进程,这样您就可以继续使用 shell。

相关内容