在继续之前,如何暂停我的Shell脚本一秒钟?


698

我只发现了如何等待用户输入。但是,我只想暂停一下while true,以免计算机崩溃。

我试过了pause(1),但是说-bash: syntax error near unexpected token '1'。怎么做到呢?

Answers:


1226

使用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


11
我总是忘记它的sleep!(pausewaitdelay将更有意义,并且更容易记住。)
Geremia 2015年

46
在Mac OS X上,s,m,h和d似乎没有任何影响。您必须以秒为单位指定时间。
AI架构师

6
我认为命名是因为我们拥有thread.sleep许多编程语言的功能@Geremia
Amin_mmz

87

然后呢:

read -p "Press enter to continue"

35
实际上,这回答了我的问题,即使它没有回答OP。
Jesse Chisholm

9
这与这篇文章无关。
Murtadha S.

6
@murtadhaalsabbagh,但与Google索引编制有很大关系:)帮帮我,顺便说一句。
Iulian Onofrei

读取-p“按Enter键继续” -t 1应该暂停1秒
SzB

@JesseChisholm我想人们正在寻找与powershell / cmd相当的bashPAUSE
rovyko

66

在Python中(问题最初被标记为Python),您需要导入时间模块

import time
time.sleep(1)

要么

from time import sleep
sleep(1)

对于shell脚本来说只是

sleep 1

哪个执行sleep命令。例如。/bin/sleep


5
是的,它也这样说,只是另一个是第一个,它有一个很好的例子:)但是+1!

3
因此,虽然没有以正确的方式做到这一点,您可以使用结合了猛砸蟒蛇的答案python -c "import time; time.sleep(1)",而不是sleep 1:)
贝瑞M.

2
@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)
ArtOfWarfare

没错,尽管您永远都不会精确到 1000毫秒,甚至不会那样。
Berry M.

通常,该规范至少是给定的时间量,通常适合于睡眠目的。
马林·皮尔斯

40

我意识到我对此有点迟了,但是您也可以打电话给sleep并传递不希望的时间。例如,如果我想等待3秒钟,我可以这样做:

/bin/sleep 3

4秒将如下所示:

/bin/sleep 4

5
偶然发现这一点,是因为投票最多的答案@RyndallCooper大约一年前发疯了,它的得分是-59倍,而且深度更深,而这个答案仍然只是最近而已。
爱多

2
@AidanEdwards在我按“投票”排序之前,这也是我的最佳答案(这是默认选项-我想知道它如何设置为“活动”?)。设置它为“ votes”可以解决它。奇怪的。
christianbundy

1
@stackoverflow-你们应该改变它的工作方式……始终将最高票选为第一!
Deian

3
“这是因为投票最多的答案……只是通过更新而仍然出现在其上方”-呃,不,出于此类琐碎的原因,与该答案中的不良内容无关,永远不要拒绝投票。
尼古拉斯·彼得森

35

在Mac OSX上,睡眠不会花费数分钟/等,而只需数秒钟。所以两分钟

sleep 120

27

运行多次睡眠和命令

sleep 5 && cd /var/www/html && git pull && sleep 3 && cd ..

这将在执行第一个脚本之前等待5秒钟,然后将再次休眠3秒钟,然后再次更改目录。


4
+1 ... cuz,如果您在睡眠后使用一个&符,则它将睡眠发送到其自己的线程,然后立即开始下一个动作(即睡眠不会延迟下一个动作)
Jay Marm 18'Sep 28'0

18

在脚本内,您可以在要暂停的操作之间添加以下内容。这将使例程暂停5秒钟。

read -p "Pause Time 5 seconds" -t 5
read -p "Continuing in 5 Seconds...." -t 5
echo "Continuing ...."

这实际上是行不通的,对吗?我认为这-t 5将在5秒钟后中止脚本,而不是继续进行,至少根据此手册页进行阅读
Brad Parks

@BradParks是的,它会起作用,以防万一:root @ Joses-iPad:〜#cat readtest.bash#!/ bin / bash echo“在这里”读取-p“暂停时间5秒” -t 5读取-p“继续5秒....“ -t 5 echo”继续....“ echo”那里“ root @ Joses-iPad:〜#cat re./st.bash此处暂停时间5秒持续5秒....继续....那里
何塞·罗莎

嗯....我认为你是对的!我以为我尝试过,但是我又尝试了一次,并且效果和广告一样。谢谢!
布拉德·帕克斯

5

read -r -p "Wait 5 seconds or press any key to continue immediately" -t 5 -n 1 -s

按下任一按钮时继续


7
尽管此代码段可能是解决方案,但包括说明确实有助于提高帖子的质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
Peacetype '18

1
此答案是仅代码注释。它不试图解释给出的代码。我觉得发布者将问题误解为“如何在等待用户输入的同时使用户输入超时”
Zimano

2

您可以使用默认随机数生成器$ RANDOM使其等待。在下面,我使用240秒。希望对@有帮助

> WAIT_FOR_SECONDS=`/usr/bin/expr $RANDOM % 240` /bin/sleep
> $WAIT_FOR_SECONDS

1

使用陷阱在运行前暂停并检查命令行

trap 'tput setaf 1;tput bold;echo $BASH_COMMAND;read;tput init' DEBUG

按任意键继续

用于set -x调试命令行

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.