Як призупинити сценарій оболонки на секунду, перш ніж продовжувати?


705

Я лише знайшов, як чекати введення користувача. Однак я хочу лише зробити паузу, щоб while trueмій комп'ютер не вийшов з ладу.

Я спробував pause(1), але це говорить -bash: syntax error near unexpected token '1'. Як це можна зробити?

Відповіді:


1234

Використовуйте 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! ( pause, waitабо delayмали б більше сенсу і простіше запам’ятати.)
Геремія

47
Схоже, на Mac OS X, s, m, h і d не впливають. Потрібно вказати час у секундах.
Архітектор AI

6
Я думаю, що називання відбувається тому, що ми thread.sleepфункціонуємо у багатьох мовах програмування @Geremia
Amin_mmz

89

А як щодо:

read -p "Press enter to continue"

35
Власне, це відповіло на моє запитання, навіть якщо воно не відповідає ОП.
Джессі Чизгольм

9
це не має нічого спільного з цією посадою.
Муртада С.

7
@murtadhaalsabbagh, Але має дуже багато спільного з індексуванням Google :) Допомагав і мені, btw.
Юліан Онофрей

read -p "Натисніть Enter, щоб продовжити" -t 1 слід призупинити 1 сек.
SzB

@JesseChisholm Я здогадуюсь, люди шукають еквівалент bash / powerdll / cmdPAUSE
rovyko

66

У Python (питання спочатку було позначено Python) вам потрібно імпортувати часовий модуль

import time
time.sleep(1)

або

from time import sleep
sleep(1)

Для оболонки скрипт - це просто

sleep 1

Який виконує sleepкоманду. напр./bin/sleep


5
так, і це говорить про це, просто перший був перший, і він має приємний приклад :) але +1!

3
Тож, поки це не правильний спосіб зробити це, ви можете поєднати відповідь пітона з Bash, використовуючи python -c "import time; time.sleep(1)"замість sleep 1:)
Беррі М.

2
@BerryM. - Займає приблизно 1,2 секунди, коли я пробую. Python не запускається миттєво - вам потрібно це врахувати. Зробіть python -c "import time; time.sleep(0.8)"замість цього. Але тоді нам потрібно врахувати, скільки часу насправді запускає пітон. Вам потрібно запустити це: date +%N; python -c "import time; time.sleep(0)"; date +%Nвизначити, скільки пінонів наносекунд потрібно для запуску. Але це також включає деякі накладні витрати від дати запуску. Запустіть це, date +%N; date +%Nщоб знайти цю верхню частину. Накладні витрати Python на моїй машині були фактично ближче до 0,14 секунди. Так я хочу time.sleep(0.86).
ArtOfWarfare

Правда, хоча ти ніколи не отримаєш рівно 1000 мс, навіть не так.
Беррі М.

Зазвичай специфікація - це принаймні вказаний проміжок часу, який зазвичай відповідає цілі сну.
Марлін Пірс

40

Я розумію, що я трохи спізнююся з цим, але ви також можете зателефонувати у сплячий час та перенести спокійний час. Наприклад, якщо я хотів почекати 3 секунди, я можу зробити:

/bin/sleep 3

4 секунди виглядатиме так:

/bin/sleep 4

5
Щойно натрапивши на це, це тому, що відповідь на голову, @RyndallCooper, божевільний майже рік тому, має -59x стільки пунктів, і набагато більше в глибині, і ця все ще з'являється над ним просто тим, що вона була нещодавнішою.
Айдо

2
@AidanEdwards Це була і сама відповідь для мене, поки я не розібрався за "голосами" (що за замовчуванням - мені цікаво, як він встановив значення "активний"?). Налаштувавши його на "голоси", виправдав це. Дивно.
Крістіанбунді

1
@stackoverflow - ви, хлопці, повинні змінити, як це працює ... тримайте голосування завжди першим!
Діян

3
"це тому, що відповідь, що голосує з головою ... все ще з'являється над нею просто, якщо вона є нещодавнішою" - так, ні, ніколи не слід ніколи голосувати за відповідь з таких легковажних причин, не пов'язаних з поганим змістом у цій відповіді.
Ніколас Петерсен

35

На Mac OSX сон не займає хвилин / тощо, а лише секунди. Так на дві хвилини,

sleep 120

27

Виконуйте кілька снів і команд

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

Перед тим, як виконати перший сценарій, це зачекатиме 5 секунд, потім спати ще 3 секунди, перш ніж він знову змінить каталог.


4
+1 ... тому що, якщо ви використовуєте одну амперсанд після сну, вона відправляє сон у власну нитку, тоді негайно розпочинає наступну дію (тобто сон не затримує наступну дію)
Джей Марм,

18

У межах сценарію ви можете додати наступне між діями, які хотіли б зробити паузою. Це призупинить розпорядок роботи на 5 секунд.

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

Насправді це не спрацює, чи не так? Я думаю, що -t 5скасувати сценарій через 5 секунд, а не продовжити, принаймні відповідно до цієї чоловічої сторінки для читання
Бред Паркс

@BradParks Так, це спрацює про всяк випадок: root @ Joses-iPad: ~ # cat readtest.bash #! / Bin / bash echo "Here" read -p "Час паузи 5 секунд" -t 5 read -p "Продовження в 5 секунд .... "-t 5 відлуння" Продовження .... "echo" Там "корінь @ 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
Хоча цей фрагмент коду може бути вирішенням, включаючи пояснення, справді допомагає покращити якість вашої публікації. Пам’ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду.
миротип

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для налагодження командного рядка

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.