我在脚本中使用以下计数器功能:
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。