用户输入Intterupt像功能一样睡觉



我想执行一个壳功能,该功能倒数为n秒(示例10),然后继续脚本。我尝试使用睡眠功能,但确实完全停止了脚本。我想要像用户在此倒计时输入" y"之类的东西,它将停止倒计时并执行特定的事情(就像"中断")。如果倒计时没有任何用户输入,则脚本继续。

谢谢!

**更新**

@krzysztofksię梦克,这正是我想要的!一个区别,如果我只需要读取返回,那么当我输入是我该怎么做的?我已经尝试了-d和-a ...

这是我的代码:

label="NTFS"
read -n 1 -t 5 MS
if [ -z "$MS" ]
  then
    echo "You don't input value, default will be taken"
  else
    echo -e "nYou pressed 'Y' and want change default backup device."
    read -p "Please input label of your secondary backup device: " secondary_label
    label=$secondary_label
fi
echo "the choosen backup device label is $label"

您可以使用read命令,例如

read -n 1 -t 10

它将等待1个字符的最高10秒。

**更新**

基于作者的额外信息

修改了解决方案
CNT=0
while [ $CNT -lt 10 ]; do
    (( CNT++ ))
    read -s -n 1 -t 1 -r KEY
    if [ "$KEY" == 'y' ]; then
        echo 'doing something'
    else
        echo 'doing nothing'
    fi
done

如果要中断,可能要捕获SIGINT:

#!/bin/sh
trap : SIGINT
echo begin
for((i=0;i<10;i++)); do printf "$ir"; sleep 1; done &
wait || kill $!
echo
echo end

脚本计算为10,但是当用户发送sigint(例如ctrl-c)

时,计时器流产

最新更新