Как показать результаты в реальном времени на терминале из сценария оболочки?

9

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

Что-то вроде topкоманды, которая обновляет результаты через определенные промежутки времени.

альтернативный текст

Lazer
источник
6
вероятно, используя cursesинтерфейс ... но я думаю, что это более
сложный

Ответы:

7

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

Вот чрезвычайно упрощенный пример:

while true
do
    clear
    date
    sleep 1
done
Приостановлено до дальнейшего уведомления.
источник
13

Вы можете использовать команду watch (1) для регулярного запуска вашего скрипта:

watch -n 1 myscript.sh

Это будет выполняться myscript.shкаждую 1 секунду, очищая экран между каждым запуском и с отметкой времени в углу. Вы можете использовать эту -dопцию, и она будет даже выделять различия в выходных данных за цикл.

joshperry
источник
Я просто думал о том, как ответить на это, используя часы.
Кевин М
Я не имею watch. Не могли бы Вы уточнить? Какая ОС?
Крис Пейдж
2

Большая часть этих данных обычно предоставляется в примитивах виртуальной файловой системы / proc. Каждый процесс имеет запись в / proc в каталоге, называемом PID. Так что / proc / 5437 будет иметь примитивы для процесса 5437. Чтение примитивов и их правильный анализ позволят вам понять, что делает верх.

Top фактически работает, вызывая определенные вызовы функций, которые извлекают эту информацию непосредственно из ядра, а не извлекают ее из файлов. Чтобы сделать то же самое из bash, вам нужно либо извлечь его из виртуальной файловой системы / proc, либо извлечь его из других вызовов, например ps.

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

sysadmin1138
источник
2

Хм, если вы смотрите на topвывод в течение более длительного времени, а не просто для проверки работоспособности программы, я предлагаю использовать htop .

Это дает вам много информации в режиме реального времени и легче контролировать и управлять.

Вы можете изменить макет вывода, например, гистограммы и столбцы.

Полемон
источник
Я полагаю, что он спрашивает, как написать приложение, которое опрашивает с регулярными интервалами, а не о top или htop конкретно.
Крис
1

topиспользует Curses и читает /procфайловую систему

Рекурсия
источник
1
За исключением систем, которые не имеют /proc. Другой способ получить информацию - это sysctl (8) / sysctl (3).
Крис Пейдж