MyTetra Share
Делитесь знаниями!
Как сделать паузу в Bash-скрипте под Linux?
Время создания: 12.02.2024 13:56
Текстовые метки: linux, bash, пауза, sleep, pause, задержка, время
Раздел: Компьютер - Linux - Bash - Команды и скрипты
Запись: xintrea/mytetra_syncro/master/base/1707735382kmm6vdafn6/text.html на raw.github.com

Команда sleep в Linux — одна из самых простых команд. Как видно из названия, его единственная функция — спать. Другими словами, он вводит задержку на указанное время.

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

Кстати, бывает так, что в системе не предусмотрена или не установлена утилита sleep. Тогда ее можно заменить специальной функцией (см. далее).

Команда sleep имеет простой синтаксис:


sleep Number[Suffix]

 

Здесь суффикс может быть:


  • s - по умолчанию, секунды
  • m - минуты.
  • h - час.
  • d - день.


Давайте посмотрим несколько примеров команды sleep.

 

Примеры команды Sleep в Bash

Хотя вы можете использовать его непосредственно в оболочке, команда sleep обычно используется для введения задержки в выполнение сценария Bash. Мы собираемся показать использование команды sleep через примеры сценариев Bash.

 

Команда sleep без суффикса считается в секундах

Предположим, вы хотите приостановить ваш Bash-скрипт на 5 секунд, вы можете использовать режим sleep следующим образом:


sleep 5

 

В примере скрипта Bash это может выглядеть так:


!/bin/bash

echo "Sleeping for 5 seconds…"

sleep 5

echo "Completed"

 

Если вы запустите его с помощью команды time, вы увидите, что скрипт bash на самом деле работал (немного) более 5 секунд.


time ./sleep.sh

Sleeping for 5 seconds…

Completed


real 0m5.008s

user 0m0.000s

sys 0m0.007s

 

Команда Sleep с суффиксом m, h или d

Вы можете указать время sleep в минутах следующим образом:


sleep 1m

 

Это приостановит скрипт/оболочку на одну минуту. Если вы хотите отложить сценарий на несколько часов, вы можете сделать это с помощью суффикса h:


sleep 2h

 

Даже если вы хотите приостановить скрипт на несколько дней, вы можете сделать это с помощью суффикса d:


sleep 5d

 

Это может помочь, если вы хотите работать в разные дни или дни недели.


Команда sleep с комбинацией секунд, минут, часов и дня

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

Например, если вы используете следующую команду:


sleep 1h 10m 5s

 

Это заставит скрипт ждать 1 час 10 минут и 5 секунд. Обратите внимание, что суффикс s здесь по-прежнему необязателен.

 

Бонусный совет: спать меньше секунды

Вы могли заметить, что наименьшая единица времени в команде sleep — секунда. Но что если ваш bash-скрипт будет спать в течение миллисекунд?

Хорошо, что вы можете использовать с плавающей точкой (десятичные точки) с командой sleep.

Поэтому, если вы хотите ввести паузу в 5 миллисекунд, используйте ее следующим образом:


sleep 0.005

 

Вы также можете использовать десятичные точки с другими суффиксами.


sleep 1.5h 7.5m

 

Будет введена задержка в 1 час 37 минут и 30 секунд.


Замена утилиты sleep

Если в системе отсутствует утилита sleep, то ее можно заменить следующей функцией, прописанной в том же bash-скрипте.


_sleep () { read -rt "$1"; }


Скрипт, использующий эту функцию, может выглядеть так:



#!/bin/bash


_sleep () { read -rt "$1" | : ; }


echo "Рас"

_sleep 5

echo "Два"



То есть, команда sleep X, по-сути, заменяется командой read -rt X | : ;


Здесь надо пояснить почему такой странный синтаксис. Дело в том, что команда read вернет ненуливой код ошибки при истечении времени. Это может повлиять на выполнение скрипта, если будет установлен выход при обнаружении ошибки через опцию set -e. Такую особенность надо учитывать. Поэтому команда read объединена через передачу потока | с пустой командой :. Эта пустая команда всегда возвращает нуливой код ошибки, и как бы "перебивает" ненуливой код ошибки read. И поэтому функция будет работать так же как и с sleep утилита, не генерируя ошибки.

Так же в этом разделе:
 
MyTetra Share v.0.62
Яндекс индекс цитирования