Як призупинити скрипт Bash за допомогою команди Linux Sleep

Команда `sleep` у Linux змушує ваш комп’ютер переходити в стан очікування. Це може здаватися нелогічним, але в певних ситуаціях пауза в роботі є необхідною. У цьому матеріалі ми розглянемо ефективні способи використання цієї команди в оболонці Bash.

Використання `sleep` є досить простим. У терміналі введіть `sleep`, потім пробіл, вкажіть число і натисніть клавішу Enter.

sleep 5

Курсор зникне на п’ять секунд, після чого знову з’явиться. Що ж відбулося? Використання команди `sleep` в командному рядку дає Bash інструкцію призупинити виконання процесу на заданий проміжок часу. У нашому прикладі це було п’ять секунд.

Можливо задавати тривалість паузи не тільки в секундах, а й в днях, годинах та хвилинах. Для цього необхідно додати до тривалості відповідний суфікс: `d` (день), `h` (година), `m` (хвилина) або `s` (секунда). Щоб, наприклад, призупинити виконання на один день, чотири години, сім хвилин та п’ять секунд, необхідно скористатися наступною командою:

sleep 1d 4h 7m 5s

Суфікс `s` (для секунд) є необов’язковим. Якщо суфікс не вказано, то `sleep` розглядатиме значення як секунди. Наприклад, якщо вам потрібно призупинити виконання на п’ять хвилин і двадцять секунд, то одним з правильних варіантів буде команда:

sleep 5m 20

Якщо ви забудете вказати суфікс `m` для хвилин, то команда `sleep` спочатку призупинить виконання на п’ять секунд, а потім знову на двадцять секунд. Отже, пауза складе 25 секунд.

В більшості команд порядок параметрів є важливим, але команда `sleep` доволі гнучка. Параметри можна вказувати в довільному порядку, і `sleep` все одно правильно їх інтерпретує. Крім того, можна використовувати числа з плаваючою комою. Наприклад, `0.5h` є коректним способом задати паузу в півгодини.

Усі наступні, дещо незвичні, команди дають в результаті паузу в 10 секунд:

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

Використання `sleep` для паузи перед виконанням команди

Команду `sleep` можна застосовувати для створення паузи перед виконанням певної команди. У прикладі нижче буде пауза в 15 секунд, після чого прозвучить звуковий сигнал.

sleep 15 && echo -en ' 07'

Використання `sleep` для паузи між командами

Також можна використовувати `sleep`, щоб створювати паузи між послідовним виконанням команд. Наступна команда спочатку відобразить список файлів у вашому каталозі документів, потім зробить паузу в 5 секунд, і після цього змінить поточний робочий каталог на ваш домашній каталог:

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

Використання `sleep` для призупинення виконання скрипту

Команду `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`. Якщо ви використовуєте Ubuntu або інший дистрибутив на базі Debian, встановіть їх за допомогою `apt-get`. В інших дистрибутивах використовуйте відповідний менеджер пакунків.

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.

Це все про команду `sleep`. Розгляд внутрішньої роботи скрипту `check_book.sh` виходить за рамки цього матеріалу. Цей скрипт був обраний виключно для демонстрації правильного використання команди `sleep`. Якщо ви бажаєте дізнатися більше про складові скрипту, зверніться до сайту проекту curl та онлайн-посібника jq.