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


9

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

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

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


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

Ответы:



13

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

watch -n 1 myscript.sh

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


Я просто думал о том, как ответить на это, используя часы.
Кевин М

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

2

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

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

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


2

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

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

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


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

1

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


1
За исключением систем, которые не имеют /proc. Другой способ получить информацию - это sysctl (8) / sysctl (3).
Крис Пейдж
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.