ChatGPT解决这个技术问题 Extra ChatGPT

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

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

我尝试了 pause(1),但它显示的是 -bash: syntax error near unexpected token '1'。怎么做到呢?


S
Serge Stroobandt

使用 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
最近,后缀在 Mac 上出现错误。 “用法:睡眠秒数”
V
Vonton

那么:

read -p "Press enter to continue"

实际上,这回答了我的问题,即使它没有回答 OP。
这与这篇文章无关。
@murtadhaalsabbagh,但与谷歌索引有很大关系:) 顺便说一句,也帮助了我。
read -p "Press enter to continue" -t 1 应该暂停 1 秒
@JesseChisholm 我猜人们正在寻找与 powershell/cmd PAUSE 等效的 bash
J
John La Rooy

在 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)
是的,虽然你永远不会得到精确的 1000 毫秒,甚至不会像那样。
R
Robot Boy

运行多个睡眠和命令

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

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


+1 ...因为如果您在睡眠后使用一个&符号,它会将睡眠发送到自己的线程然后立即开始下一个动作(即睡眠不会延迟下一个动作)
为什么是 && 而不是 ;
@vrnvorona && 将等待第一个命令完成。
@RobotBoy 我认为最重要的是,如果第一个命令失败, && 将不会继续,但是 ;将要。 ;也会等待,但不会检查成功。
p
pcmaster574

我意识到我对此有点晚了,但是您也可以调用 sleep 并通过不想要的时间。例如,如果我想等待 3 秒,我可以这样做:

/bin/sleep 3

4 秒看起来像这样:

/bin/sleep 4

A
AnneTheAgile

在 Mac OSX 上,睡眠不需要几分钟等,只需几秒钟。所以两分钟,

sleep 120

J
Jose H. Rosa

在脚本中,您可以在您希望暂停的操作之间添加以下内容。这将使例程暂停 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 秒...." -t 5 echo "Continuing ...." echo "There" root@Joses-iPad:~ # cat re./st.bash Here Pause Time 5 secondsContinuing in 5 Seconds....Continuing .... 那里
嗯....我认为你是对的!我以为我试过了,但我又试了一次,它像宣传的那样工作。谢谢!
P
Paul Rooney
read -r -p "Wait 5 seconds or press any key to continue immediately" -t 5 -n 1 -s

按任意一个按钮继续

有关详细信息,请查看 read 手册页 ref 1ref 2


虽然此代码段可能是解决方案,但 including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。
此答案是仅代码注释。它不会试图解释给出的代码。我觉得发帖人将问题误解为“我如何在等待用户输入的同时对该用户输入进行超时”
B
Balaji Boggaram Ramanarayan

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

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

A
Akhil

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

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

按任意键继续

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