如何在执行期间允许暂停shell脚本?

时间:2016-09-16 15:53:15

标签: shell

假设我有一个充当警报的脚本。假设您将其设置为五分钟,并执行以下操作:

printf '%s\n' 'Alarm set for 5 minutes'
sleep 300 && printf '%s\n' 'Alarm!'

如何实现一种连续监视暂停键的方法,比如“p”或“SPC”,然后等到再次按下一个键才能恢复脚本的正常执行?我想让用户暂停闹钟。

编辑:为了澄清,我想在运行其他代码的同时持续监控暂停密钥。这与停止执行以监听stin相反。

3 个答案:

答案 0 :(得分:1)

如果您接受发送信号作为中止计时器的方法,则可以轻松完成此操作:

#!/bin/sh

printf '%s\n' 'Alarm set for 5 minutes.  ^C to continue'
sleep 300 &
trap : INT
if wait; then
    echo Timer complete
else
    echo Timer aborted
fi

请注意,此实现实际上并不会停止sleep进程,如果该进程正在执行更重要的操作,您可能希望终止它。 (而不是在陷阱中做任何事情,向孩子发送信号。)

答案 1 :(得分:0)

许多shell都有内置read函数,允许您从stdin读取。您可以使用它来使您的程序具有交互性。

但是,如果你需要做这种I / O等,我认为你应该从shell转向真正的编程语言。

答案 2 :(得分:0)

你可以这样做

// alarm running = true
while true
do
   //running  running is true resume or start alarm
   /** pseudo code
       if running == true
           start or resume alarm
       else 
           pause alarm
       your alarm start or re
    **/
  IFS= read -r -t 0.5 -n 1 -s holder && var="$holder"
  if [ "$var" == "p" ]
    then
          #running = false
         echo "You have pause your alarm "
  elif [ "$var" == "R" ]
   then
      #running = true
     echo "start your timer"
   fi
done