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

1105
我只知道如何等待用户输入,但是我想要暂停程序运行,以免while true导致计算机崩溃。我尝试使用pause(1),但是出现了-bash: syntax error near unexpected token '1'的错误提示。请问如何解决?
11个回答

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


100
在 Mac OS X 上,s、m、h 和 d 似乎都没有影响,你必须指定时间(单位)为秒。 - The AI Architect
7
我认为这个命名是因为在许多编程语言中都有 thread.sleep 函数。@Geremia - Amin_mmz
1
最近在 Mac 上使用后缀会出现错误。"usage: sleep seconds" - nzifnab
如果您遇到“无效的时间间隔”错误,您可能需要检查行尾设置。如果您使用Windows工具创建了脚本,则行尾为“CR LF”,您需要将其更改为仅适用于Linux的“LF”。(实际上,错误应该是自说明的:“invalid time interval '1\r'”,在这里您可以看到来自\r\n的额外\r - Romano

208

那么,关于什么呢:

read -p "Press enter to continue"

87
实际上,这回答了_我的_问题,即使它没有回答原帖的问题。 - Jesse Chisholm
18
这与这篇文章无关。 - Murtadha S.
17
@murtadhaalsabbagh,但这与Google索引有很大关系 :) 顺便也帮了我一个忙。 - Iulian Onofrei
7
请按回车键继续 -p "Press enter to continue" -t 1 应该暂停1秒。 - SzB
6
@JesseChisholm 我猜人们正在寻找类似于PowerShell/cmd的PAUSE命令的Bash等效命令。 - rovyko

93

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

import time
time.sleep(1)
或者
from time import sleep
sleep(1)

对于shell脚本来说,它只是

sleep 1

执行sleep命令。例如:/bin/sleep


6
是的,这也有这个意思,只是另一个先出现了,并且它有一个很好的例子 :) 但是+1! - user3268208
4
虽然这不是正确的做法,但你可以使用 python -c "import time; time.sleep(1)" 代替 sleep 1,将 Python 的答案与 Bash 结合起来。 :) - Berry M.
3
@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.

68

运行多个sleep和命令

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

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


5
如果在sleep之后只使用一个&符号,它会将sleep发送到它自己的线程中,然后立即开始下一个动作(即睡眠不会延迟下一个动作)。 - Jay Marm
为什么使用 && 而不是 ; - vrnvorona
@vrnvorona && 会等待第一个命令执行完毕。 - Robot Boy
3
@RobotBoy 我认为最重要的是,如果第一个命令失败了,&& 将不会继续执行,但 ; 会。; 也会等待,但不会检查成功。 - vrnvorona

45

我意识到我有点晚了,但是你也可以调用sleep方法并传入所需的时间。例如,如果我想等待3秒,我可以这样做:

我意识到我有点晚了,但是你也可以调用sleep方法并传入所需的时间。例如,如果我想等待3秒,我可以这样做:

/bin/sleep 3

4 秒钟看起来就像这样:

/bin/sleep 4

我需要的不是Python的版本。谢谢。 - Amit Ray

44
在Mac OSX上,睡眠状态不以分钟等为单位,只以秒为单位。因此,要让电脑睡眠两分钟,
sleep 120

23

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

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

这样做行不通,对吧?我认为-t 5会在5秒后中止脚本,而不是继续执行,至少根据read的man页面是这样的。 - Brad Parks
@BradParks 是的,它可以工作。以防万一: root@Joses-iPad:~

cat readtest.bash

#!/bin/bashecho "这里"read -p "暂停时间5秒" -t 5 read -p "5秒后继续...." -t 5 echo "继续...."echo "那里"root@Joses-iPad:~

cat re./st.bash

这里 暂停时间5秒5秒后继续....继续.... 那里
- Jose H. Rosa
嗯...我想你是对的!我以为我试过了,但我刚刚又试了一遍,它按照广告所说的工作。谢谢! - Brad Parks

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

按下任意一个按钮继续操作

有关更多信息,请查看read手册页参考1参考2


9
尽管这段代码可能是解决方案,但附带解释确实有助于提高您的帖子质量。请记住,您正在回答未来读者的问题,这些人可能不知道您建议使用代码的原因。 - peacetype
3
此回答仅为代码注释,未尝试解释所给的代码。我觉得发帖者误解了问题,认为是“如何等待用户输入同时对该用户输入设置超时”。 - Zimano

3
你可以使用$RANDOM来延迟执行,它是一个默认的随机数生成器。下面我使用了240秒作为示例。希望这能帮到你@
> WAIT_FOR_SECONDS=`/usr/bin/expr $RANDOM % 240` /bin/sleep
> $WAIT_FOR_SECONDS

3

使用trap命令在运行命令之前暂停并检查命令行(使用tput进行彩色显示)。

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

请按任意键继续

set -x一起使用以调试命令行


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接