続行する前にシェルスクリプトを1秒間一時停止するにはどうすればよいですか?


702

ユーザーの入力を待つ方法を見つけただけです。ただし、while trueコンピュータがクラッシュしないように、一時停止したいだけです。

私は試しましたpause(1)が、それは言い-bash: syntax error near unexpected token '1'ます。どうすればできますか?

回答:


1231

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


12
いつも忘れてsleepます!(pausewait、またはdelayより多くの意味をなすと覚えやすいでしょう。)
Geremia

47
Mac OS Xでは、s、m、h、dは影響がないようです。時間は秒単位で指定する必要があります。
AIアーキテクト

6
命名はthread.sleep、多くのプログラミング言語で機能を持っているためだと思います@Geremia
Amin_mmz

89

そして何について:

read -p "Press enter to continue"

35
実際には、OPに答えない場合でも、これは私の質問に答えました。
ジェシーチザム2017年

9
これはこの投稿とは関係ありません。
Murtadha S.

6
@murtadhaalsabbagh、しかし、Googleのインデックス作成とは非常に関係があります:)私も助けてくれました、ところで。
Iulian Onofrei

read -p "続行するには
Enterキーを押して

@JesseChisholm私は人々がpowershell / cmdに相当するbashを探していると思いますPAUSE
rovyko

66

Python(質問は元々Pythonでタグ付けされていました)では、時間モジュールをインポートする必要があります

import time
time.sleep(1)

または

from time import sleep
sleep(1)

シェルスクリプトはちょうどです

sleep 1

sleepコマンドを実行します。例えば。/bin/sleep


5
はい、これもそれを言っています、それはちょうど最初のものだった他のものです、そしてそれは良い例があります:)しかし+1!

3
だから、それを行うには正しい方法ではありませんが、あなたが使用してバッシュでPythonの答えを組み合わせることができます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 +%NPythonが起動するまでにかかるナノ秒数を決定します。ただし、これには実行日のオーバーヘッドも含まれます。これdate +%N; date +%Nを実行して、そのオーバーヘッドを見つけます。私のマシンでのPythonのオーバーヘッドは、実際には0.14秒に近かった。だから欲しいですtime.sleep(0.86)
ArtOfWarfare 2017

確かに、正確に 1000msになることは決してありません。
Berry M.

通常、仕様は少なくとも所定の時間であり、通常は睡眠の目的に適しています。
マーリンピアース

40

私はこれで少し遅れていることに気づきましたが、sleepを呼び出して不要な時間を渡すこともできます。たとえば、3秒間待機したい場合は、次のようにできます。

/bin/sleep 3

4秒は次のようになります。

/bin/sleep 4

5
これに偶然出会ったのは、トップ投票の回答である@RyndallCooperがほぼ1年前に狂ったため、-59倍のポイントがあり、さらに深くなったためです。
Aido

2
@AidanEdwards「投票」でソートするまでは、これも私にとって一番の答えでした(これがデフォルトです-どのようにして「アクティブ」に設定されたのでしょうか?)。「votes」に設定すると、修正されます。変だ。
christianbundy

1
@stackoverflow-皆さんはそれがどのように機能するかを変更する必要があります...常にトップの投票を常に最初にしてください!
Deian

3
「トップ投票の回答...が最近の投稿であるにもかかわらず、その上に表示されているためです」-ええと、いいえ、その回答の内容に関係のない軽薄な理由で、回答を投票してはいけません。
Nicholas Petersen


27

複数のスリープとコマンドを実行する

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

これは、最初のスクリプトを実行する前に5秒間待機し、次に3秒間スリープしてから、ディレクトリを再度変更します。


4
+1 ... cuzスリープの後に1つのアンパサンドを使用すると、スリープが独自のスレッドに送信され、すぐに次のアクションが開始されます(つまり、スリープは次のアクションを遅らせません)
Jay Marm

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 "ここで" read -p "一時停止時間5秒" -t 5 read -p "続行中5秒.... "-t 5 echo"継続中.... "echo"そこ "echo @There 'root @ Joses-iPad:〜#cat re./st.bashここで一時停止時間5秒継続中5秒......継続中....そこ
ホセH.ロサ

うーん....あなたは正しいと思います!私はこれを試したと思ったが、もう一度試したところ、宣伝どおりに機能した。ありがとう!
ブラッドパークス

5

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

いずれかのボタンを押したときに続行するには


7
このコードスニペットが解決策となる場合もありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。
peacetype

1
この回答はコードのみのコメントです。与えられたコードを説明しようとするものではありません。ポスターが質問を「ユーザー入力を同時にタイムアウトしながら、ユーザー入力を待つ方法」と誤解しているように感じます
Zimano '22

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コマンドラインをデバッグするために使用します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.