【问题标题】:How can I allow a shell script to be paused during execution?如何允许 shell 脚本在执行期间暂停?
【发布时间】:2017-01-24 22:12:22
【问题描述】:

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

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

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

编辑:澄清一下,我想在运行其他代码时持续监控暂停键。这与停止执行以收听 stin 不同。

【问题讨论】:

标签: shell


【解决方案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 进程,如果该进程正在做一些更重要的事情,您可能希望终止它。 (与其在陷阱中什么都不做,不如向孩子发送信号。)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      你可以像下面那样做

      // 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 2016-03-06
        • 1970-01-01
        • 2012-02-06
        • 2022-11-17
        • 2012-08-25
        • 2020-09-15
        相关资源
        最近更新 更多