像用户输入intterupt一样睡觉

时间:2017-11-22 12:46:02

标签: shell unix

我想做一个倒计时到n秒的shell函数(例如10),之后继续编写脚本。 我尝试了睡眠功能,但它确实完全停止了脚本。 我希望在用户在倒计时期间输入“y”时,它会停止倒计时并做一些特别的事情(很像“中断”)。 如果倒计时结束而没有任何用户输入,脚本将继续。

谢谢!

**更新* *

@KrzysztofKsiężyk这正是我想要的! 一个区别,如果我想要读取返回只有“Y”是输入我怎么能这样做?我已经尝试过-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"

2 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

如果你想要一个中断,你可能想要陷阱SIGINT:

# But there must return a CloudServer instance.

脚本计数到10,但是当用户发送SIGINT(例如ctrl-C)时,计时器将中止