Как многократно запускать bash script каждые N секунд?

У меня есть сценарий оболочки, печатающий некоторую статистику, такую как информация о диске, использование памяти и так далее. Но он показывает информацию только один раз после запуска и выхода скрипта. Можно ли заставить этот скрипт запускаться повторно (например, htop) или что-то в этом роде? Я хочу, чтобы эта информация обновлялась каждые 5-10 секунд.

Ответ 1

Небольшое улучшение моего комментария: если ваш script выходит с истинным (например, когда он заканчивается на exit 0), вы можете запустить

while script; do sleep 10; done

Это канонический способ повторить команду, если она не сработает.

Ответ 2

В linux вы можете использовать программу watch для повторения действия. Предполагая, что script.sh является исполняемым:

watch -n 10 path/to/script.sh

Запустит его каждые 10 секунд.

Чтобы выполнить свой script исполняемый файл, вы можете использовать chmod +x script.sh. Не забудьте добавить shebang

#!/bin/bash

в первую строку (при условии, что это a bash script).

Если вы используете script из вашего текущего каталога, вы можете:

watch -n 10 ./script.sh

Ответ 3

Как уже упоминалось в комментарии, вам нужно обернуть script в безусловном цикле:

while :; do script; sleep 10; done

В зависимости от логики script вместо спящего режима 10 вы можете поместить разные, например, read - для входных данных на stdin файла/сокета. Это гарантирует, что script не проснется, пока не будут присутствовать некоторые данные для обработки, и если данные будут присутствовать, то script не займет времени, чтобы проснуться.