Поиск по сайту:

Как приостановить скрипт Bash с помощью команды сна в Linux


Команда sleep заставляет ваш Linux-компьютер ничего не делать. Возможно, это нелогично, но иногда просто необходим период бездействия. В этой статье показано, как эффективно использовать эту команду оболочки Bash.

Использовать sleep очень просто. В командной строке введите sleep, пробел, число и нажмите Enter.

sleep 5

Курсор исчезнет на пять секунд, а затем вернется. Что случилось? Использование sleep в командной строке указывает Bash приостановить обработку на указанное вами время. В нашем примере это было пять секунд.

Мы можем передать продолжительность в sleep в днях, часах и минутах, а также в секундах. Для этого добавьте суффикс d, h, m, или s к длительности. Чтобы приостановить сон на один день, четыре часа, семь минут и пять секунд, используйте следующую команду:

sleep 1d 4h 7m 5s

Суффикс s (для секунд) необязателен. Без суффикса sleep будет рассматривать любую продолжительность как секунды. Предположим, вы хотите сделать паузу sleep на пять минут и двадцать секунд. Один правильный формат этой команды:

sleep 5m 20

Если вы забудете добавить суффикс m к длительности минут, вы укажете sleep сделать паузу на пять секунд, а затем еще раз на двадцать секунд. Таким образом, sleep приостанавливается на 25 секунд.

Многие команды требуют указания параметров в определенном порядке, но sleep очень щадящий. Вы можете указать их в любом порядке, и sleep будет иметь смысл. Вы также можете указать число с плавающей запятой в качестве параметра. Например, 0,5 часа — это допустимый способ указать, что вы хотите приостановить sleep на полчаса.

Все следующие (все более эксцентричные) команды сообщают sleep паузу на 10 секунд.

sleep 10
sleep 5 5s
Sleep 1 1 1s 1 1 1s 1 2
sleep 0.16667m

Использование сна для паузы перед командой

Команду sleep можно использовать для создания паузы перед выполнением команды. Эта команда будет приостанавливаться на 15 секунд, а затем издавать звуковой сигнал.

sleep 15 && echo -en '\007'

Использование Sleep для паузы между двумя командами

Вы можете использовать sleep, чтобы дать паузу между двумя командами. Эта команда выведет список файлов в вашем каталоге Documents, сделает паузу на пять секунд, а затем изменит текущий рабочий каталог на ваш домашний каталог:

ls -R ~/Documents && sleep 5 && cd ~

Использование сна для приостановки выполнения скрипта

Вы можете использовать команду sleep в сценариях оболочки, чтобы приостановить выполнение сценария на определенное время. Как правило, вы делаете это, чтобы дать некоторому процессу достаточно времени для завершения, прежде чем сценарий продолжит свою работу. Вы также можете использовать его для ограничения скорости запросов, которые скрипт делает к другому ресурсу.

Чтобы продемонстрировать именно это, вот сценарий, который обращается к веб-службе Google с помощью curl. Когда вы запрашиваете у веб-сервиса номер ISBN книги, он возвращает дамп данных JSON об этой книге. Мы можем проанализировать эти данные, передав их утилите jq для получения названия книги. Чтобы скрипт не нагружал веб-службу, он приостанавливается на одну секунду между веб-запросами.

Создайте файл, содержащий следующий текст, и сохраните его как check_book.sh.

#!/bin/bash

for book in `cat $1`
do
 echo $book":"
 curl -s https://www.googleapis.com/books/v1/volumes?q=isbn:$book | jq '.items | .[] | .volumeInfo.title'
 echo ""
 sleep 1
done

echo "All done."

Введите следующую команду, чтобы установить разрешения на выполнение и сделать скрипт исполняемым.

chmod +x check_book.sh

Для скрипта требуются утилиты curl и jq. Используйте apt-get для установки этих пакетов в вашу систему, если вы используете Ubuntu или другой дистрибутив на основе Debian. В других дистрибутивах Linux вместо этого используйте инструмент управления пакетами вашего дистрибутива Linux.

sudo apt-get install curl
sudo apt-get install jq

Создайте текстовый файл, содержащий следующие числа, и сохраните его как books.txt.

9781565921276
9781874416685
9781565921672
9780521431088
9781491941591

Запустите скрипт check_book.sh и передайте файл books.txt в качестве параметра.

./check_book.sh books.txt

Запросы к веб-службе Google отправляются с интервалом в одну секунду. Название книги появится вскоре после запроса каждого номера ISBN.

Это все, что нужно заснуть. Внутренняя работа скрипта check_book.sh выходит за рамки этой статьи. Сценарий был выбран исключительно для иллюстрации правильного использования команды sleep. Если вы хотите узнать больше о двух основных компонентах скрипта, обратитесь к странице проекта curl и онлайн-руководству jq.

RELATED: Best Linux Laptops for Developers and Enthusiasts