如何在继续之前暂停我的 shell 脚本一秒钟?
Posted
技术标签:
【中文标题】如何在继续之前暂停我的 shell 脚本一秒钟?【英文标题】:How do I pause my shell script for a second before continuing? 【发布时间】:2014-03-04 10:21:18 【问题描述】:我只找到了如何等待用户输入。但是,我只想暂停一下,以免我的while true
使我的计算机崩溃。
我试过pause(1)
,但它显示-bash: syntax error near unexpected token '1'
。怎么办?
【问题讨论】:
【参考方案1】:在 Python 中(问题最初被标记为 Python)你需要导入时间模块
import time
time.sleep(1)
或
from time import sleep
sleep(1)
因为 shell 脚本只是
sleep 1
执行sleep
命令。例如。 /bin/sleep
【讨论】:
是的,这也说明了,只是另一个是第一个,它有一个很好的例子:)但是+1! 因此,虽然不是正确的方法,但您可以使用python -c "import time; time.sleep(1)"
而不是 sleep 1
将 python 答案与 Bash 结合起来 :)
@BerryM。 - 尝试时大约需要 1.2 秒。 Python 不会立即启动——你需要考虑到这一点。改为python -c "import time; time.sleep(0.8)"
。但接下来我们需要考虑 python 启动实际需要多长时间。你需要运行这个:date +%N; python -c "import time; time.sleep(0)"; date +%N
来确定 python 需要多少纳秒才能启动。但这也包括运行日期的一些开销。运行此date +%N; date +%N
以查找开销。 Python 在我的机器上的开销实际上接近 0.14 秒。所以我想要time.sleep(0.86)
。
没错,虽然你永远不会得到准确的 1000ms,甚至不是那样的。【参考方案2】:
使用sleep
命令。
例子:
sleep .5 # Waits 0.5 second.
sleep 5 # Waits 5 seconds.
sleep 5s # Waits 5 seconds.
sleep 5m # Waits 5 minutes.
sleep 5h # Waits 5 hours.
sleep 5d # Waits 5 days.
在指定时间单位时也可以使用小数;例如sleep 1.5s
【讨论】:
似乎在 Mac OS X 上,s、m、h 和 d 都没有影响。您必须以秒为单位指定时间。 我认为命名是因为我们在许多编程语言中都有thread.sleep
函数@Geremia【参考方案3】:
我意识到我这样做有点晚了,但你也可以调用 sleep 并将不想要的时间打发进去。例如,如果我想等待 3 秒,我可以这样做:
/bin/sleep 3
4 秒如下所示:
/bin/sleep 4
【讨论】:
【参考方案4】:然后呢:
read -p "Press enter to continue"
【讨论】:
实际上,这回答了 my 的问题,即使它没有回答 OP。 这与本帖无关。 @murtadhaalsabbagh,但与 Google 索引有很大关系 :) 也帮助了我,顺便说一句。 read -p "Press enter to continue" -t 1 应该暂停 1 秒 @JesseChisholm 我猜人们正在寻找与 powershell/cmd 等效的 bashPAUSE
【参考方案5】:
在脚本中,您可以在您希望暂停的操作之间添加以下内容。这将使例程暂停 5 秒钟。
read -p "Pause Time 5 seconds" -t 5
read -p "Continuing in 5 Seconds...." -t 5
echo "Continuing ...."
【讨论】:
这实际上行不通,对吗?我认为-t 5
将在 5 秒后中止脚本,而不是继续,least according to this man page for read
@BradParks 是的,它会工作以防万一:root@Joses-iPad:~ # cat readtest.bash #!/bin/bash echo "Here" read -p "Pause Time 5 seconds" - t 5 read -p "Continuing in 5 seconds...." -t 5 echo "Continuing ...." echo "There" root@Joses-iPad:~ # cat re./st.bash Here Pause Time 5 secondsContinuing在 5 秒内......继续......那里
嗯....我认为你是对的!我以为我试过了,但我又试了一次,它像宣传的那样工作。谢谢!【参考方案6】:
在 Mac OSX 上,睡眠不需要几分钟等,只需几秒钟。所以两分钟,
sleep 120
【讨论】:
【参考方案7】:read -r -p "Wait 5 seconds or press any key to continue immediately" -t 5 -n 1 -s
按任意一个按钮继续
更多信息请查看read
manpage ref 1, ref 2
【讨论】:
虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。 这个答案是一个代码注释。它不会试图解释给出的代码。我觉得发帖人将这个问题误解为“我如何在等待用户输入的同时让该用户输入超时”【参考方案8】:运行多个睡眠和命令
sleep 5 && cd /var/www/html && git pull && sleep 3 && cd ..
这将在执行第一个脚本之前等待 5 秒,然后在再次更改目录之前再次休眠 3 秒。
【讨论】:
+1 ...因为如果您在睡眠后使用一个与号,它会将睡眠发送到自己的线程,然后立即开始下一个动作(即睡眠不会延迟下一个动作)跨度> 为什么是&&
而不是;
?
@vrnvorona &&
将等待第一个命令完成。
@RobotBoy 我认为最重要的是,如果第一个命令失败, && 将不会继续,但是 ;将要。 ;也会等待,但不会检查成功。【参考方案9】:
您可以使用默认随机数生成器 $RANDOM 让它等待。在下面我使用 240 秒。希望对你有帮助@
> WAIT_FOR_SECONDS=`/usr/bin/expr $RANDOM % 240` /bin/sleep
> $WAIT_FOR_SECONDS
【讨论】:
【参考方案10】:在运行之前使用trap
暂停并检查命令行(使用tput
显示颜色)
trap 'tput setaf 1;tput bold;echo $BASH_COMMAND;read;tput init' DEBUG
按任意键继续
使用
set -x
调试命令行
【讨论】:
以上是关于如何在继续之前暂停我的 shell 脚本一秒钟?的主要内容,如果未能解决你的问题,请参考以下文章