假设我有一个充当警报的脚本。假设您将其设置为五分钟,并执行以下操作:
printf '%s\n' 'Alarm set for 5 minutes'
sleep 300 && printf '%s\n' 'Alarm!'
如何实现一种连续监视暂停键的方法,比如“p”或“SPC”,然后等到再次按下一个键才能恢复脚本的正常执行?我想让用户暂停闹钟。
编辑:为了澄清,我想在运行其他代码的同时持续监控暂停密钥。这与停止执行以监听stin相反。
答案 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