14

Как я могу запустить команду после X секунд без сна. Или со сном, но без оболочки, просто дождитесь ответа этой команды?

Я использовал это, но это не сработало

sleep 5 ; ls > a.txt

Мне нужно запустить его в фоновом режиме. Я пытаюсь не запускать его в скрипте, я пытаюсь запустить ls через 5 секунд, а оболочка не просто ждет окончания сна

2 ответа2

31

Более краткий способ написания того, что предложил Хеннес:

(sleep 5; echo foo) & 

Кроме того, если вам нужно больше, чем несколько секунд, вы можете использовать at. Есть три способа дать команду at:

  1. Труба это:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. Сохраните команду, которую хотите запустить, в текстовом файле, а затем передайте этот файл по at:

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. Вы можете также передать at команды из STDIN:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    Затем нажмите Ctrl + D , чтобы выйти из at оболочке. Команда ls будет запущена через одну минуту.

Вы можете указать очень точное время в формате [[CC]YY]MMDDhhmm[.ss] , как в

$ at -t 201412182134.12 < script.sh

Это запустит скрипт script.sh в 21:34 и 12 секунд 18 декабря 2014 года. Таким образом, теоретически, вы можете использовать at для запуска чего-то на пять секунд в будущем. Однако это похоже на использование танка, чтобы ударить муху, и предложение Хеннеса лучше.

4

Вы можете обойти это, запустив оболочку или скрипт в фоновом режиме.

Пример:

/bin/sh -c "sleep 5 ; echo foo" &
[1] 63791
>                               Active shell prompt here

foo                             5 second later output appears.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .