如何在继续之前暂停我的 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 等效的 bash PAUSE【参考方案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 脚本一秒钟?的主要内容,如果未能解决你的问题,请参考以下文章

让lua脚本等待/暂停/睡眠/阻塞几秒钟的最简单方法?

shell脚本中怎么实现:暂停,按键继续?

shell脚本中怎么实现:暂停,按键继续?

你如何在android中让代码暂停几秒钟?

在shell脚本中添加暂停,按任意键继续

linux shell中如何让终端输出结果后暂停一下 要不一闪就关了