Повторять команду каждые x интервалов времени в терминале?

Повторять команду каждые x интервалов времени в терминале?

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

Мне не нужен скрипт, мне нужна простая команда, которую можно выполнить в терминале.

решение1

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

Откройте Терминал и введите:

watch -n x <your command>

изменятьИксчтобы указать желаемое время в секундах.

Для получения дополнительной помощи по использованию watchкоманды и ее параметров выполните man watchили посетите этот сайт.Связь.

Например :ниже будет перечислен каждый60-ена том же Терминале содержимое каталога Desktop, чтобы вы могли узнать, произошли ли какие-либо изменения:

watch -n 60 ls -l ~/Desktop

решение2

Эту команду можно также использовать в терминале, помимоответ nux:

while true; do <your_command>; sleep <interval_in_seconds>; done

Пример:

while true; do ls; sleep 2; done

Эта команда выведет вывод lsс интервалом в 2 секунды.

Используйте Ctrl+ C, чтобы остановить процесс.

Есть несколько недостатков watch:

  • Он не может использовать псевдонимы команд.
  • Если вывод какой-либо команды слишком длинный, прокрутка не будет работать должным образом.
  • Есть некоторые проблемы с установкоймаксимальный временной интервалсверх определенного значения.
  • watchбудет интерпретировать последовательности цветов ANSI, передавая escape-символы с помощью параметра -cили --color. Например, вывод pygmentizeбудет работать, но не будет работать для ls --color=auto.

В вышеуказанных обстоятельствах это может показаться лучшим вариантом.

решение3

Просто хотел внести свой вклад.сурав c.'песокнуксответы:

  1. Хотя watchэто будет работать отлично на Ubuntu, вы можете этого избежать, если хотите, чтобы ваш "Unix-fu" был чистым. Например, на FreeBSD watchесть команда "snoop on another tty line".

  2. while true; do command; sleep SECONDS; doneтакже есть предостережение: вашу команду может быть сложнее убить с помощью Ctrl+ C. Вы можете предпочесть:

    while sleep SECONDS; do command; done
    

    Это не только короче, но и легче прерывается. Проблема в том, что сначала он будет спать, а затем выполнит вашу команду, поэтому вам придется немного подождать, SECONDSпрежде чем произойдет первое появление команды.

решение4

вы можете использовать crontab. запустите команду crontab -eи откройте ее в предпочитаемом вами текстовом редакторе, затем добавьте эту строку

*/10 * * * *  /path-to-your-command

Это будет запускать вашу команду каждые 10 минут.

* */4 * * *  /path-to-your-command

Это будет запускать вашу команду каждые 4 часа.

Другое возможное решение

$ ..some command...; for i in $(seq X); do $cmd; sleep Y; done

Иксколичество повторений.

Ивремя подождать, чтобы повторить.

Пример :

$ echo; for i in $(seq 5); do $cmd "This is echo number: $i"; sleep 1;done

Связанный контент