Команда `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.