Сценарий оболочки порождает процесс после задержки - PullRequest
21 голосов
/ 16 декабря 2009

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

#!/bin/sh
# Echo A 60 seconds later, but without blocking the rest of the script
sleep 60 && echo "A"

echo "B"
echo "C"

Вывод должен быть

B
C
... 60 seconds later
A

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

Ответы [ 4 ]

37 голосов
/ 16 декабря 2009

& запускает фоновое задание, поэтому

sleep 60 && echo "A" &
8 голосов
/ 16 декабря 2009

Небольшое расширение для других ответов заключается в ожидании фоновых команд в конце скрипта.

#!/bin/sh
# Echo A 60 seconds later, but without blocking the rest of the script

set -e

sleep 60 && echo "A" &
pid=$!

echo "B"
echo "C"

wait $pid
6 голосов
/ 16 декабря 2009

Не могу попробовать прямо сейчас, но

(sleep 60 && echo "A")&

должен сделать работу

0 голосов
/ 05 февраля 2019

Альтернатива:

echo 'echo "A"' | at now + 1 min

Если операционная система не работает в указанное время, команда будет выполнена, как только она станет доступна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...