Как мне приостановить сценарий оболочки на секунду, прежде чем продолжить?

483

Я только нашел, как ждать ввода пользователя. Тем не менее, я только хочу сделать паузу, чтобы мой while true не разбивал мой компьютер.

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

Теги:
terminal

9 ответов

903

Используйте команду 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

  • 8
    Я всегда забываю, что это sleep ! ( pause , wait или delay будут иметь больше смысла и их будет легче запомнить.)
  • 25
    Похоже, на Mac OS X s, m, h и d не имеют никакого влияния. Вы должны указать время в секундах.
Показать ещё 3 комментария
57

В Python (вопрос был первоначально помечен Python) вам нужно импортировать модуль времени

import time
time.sleep(1)

или

from time import sleep
sleep(1)

Для оболочки script есть просто

sleep 1

Выполняет команду sleep. например. /bin/sleep

  • 4
    да, это говорит об этом, просто другой был первым, и у него есть хороший пример :) но +1!
  • 2
    Поэтому, хотя это неправильный способ сделать это, вы можете комбинировать ответ python с Bash, используя python -c "import time; time.sleep(1)" вместо sleep 1 :)
Показать ещё 2 комментария
48

А как насчет:

read -p "Press enter to continue"
  • 15
    На самом деле, это ответило на мой вопрос, даже если оно не отвечает на ОП.
  • 4
    это не имеет ничего общего с этим постом.
Показать ещё 3 комментария
37

Я понимаю, что я немного опоздал с этим, но вы также можете вызвать сон и передать время ожидания. Например, если бы я хотел подождать 3 секунды, я могу сделать:

/bin/sleep 3

4 секунды будут выглядеть так:

/bin/sleep 4
  • 4
    Что не так с этим ответом? Это совершенно правильно, не нужно понижать голос ..
  • 5
    Просто наткнулся на это, потому что ответ с наибольшим количеством голосов, @RyndallCooper, безумный почти год назад, набрал -59x столько же очков и ушел намного глубже, и этот вопрос все еще появляется над ним, просто будучи более свежим.
Показать ещё 3 комментария
22

В Mac OSX сон не занимает минуты/и т.д., только секунды. Итак, в течение двух минут,

sleep 120
14

Внутри script вы можете добавить следующее между действиями, которые вы хотели бы сделать паузой. Это приостановит процедуру в течение 5 секунд.

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

Запуск нескольких спящих и команд

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

Это будет ждать 5 секунд перед выполнением первого скрипта, а затем снова будет спать в течение 3 секунд, прежде чем он снова изменит каталог.

  • 3
    +1 ... Потому что если вы используете один амперсанд после сна, он отправляет сон в свой собственный поток, а затем сразу же начинает следующее действие (т.е. сон не задерживает следующее действие)
3

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

Чтобы продолжить, когда вы нажимаете любую кнопку

  • 6
    Хотя этот фрагмент кода может быть решением, включение пояснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код.
  • 1
    Этот ответ является комментарием только для кода. Он не пытается объяснить данный код. Я чувствую, что постер неверно истолковал вопрос как «Как мне ждать ввода пользователя, одновременно имея время ожидания для этого ввода пользователя»
0

Мне было интересно, если добавить в сценарий bash паузу оператора, пока файл существует. Затем, создав такой файл, вы можете управлять запуском.

while [ YOUR CONDITION ]; do
    while [ -f <folder>/<file> ]; do 
        sleep 30
    done
    DO YOUR JOB...
done

Таким образом, в каждом цикле скрипт сначала ищет файл, и если такой файл существует, он продолжает ждать, пока вы не удалите файл. Затем вы можете создать файл в любое время, чтобы приостановить выполнение сценария. Это смешно?

Я ценю комментарии/предложения/исправления/издания. Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню