Як відобразити результати роботи на терміналі зі скрипту оболонки?


9

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

Щось на зразок topкоманди, яка оновлює результати через певні певні проміжки часу.

alt текст


6
ймовірно, що використовує cursesінтерфейс ... але я думаю, що це більш
серйозне

Відповіді:



13

ви можете використовувати команду watch (1) для запуску сценарію через регулярні інтервали:

watch -n 1 myscript.sh

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


Я просто думав, як відповісти на це за допомогою годинника.
Кевін М

Я не маю watch. Чи можете ви бути більш конкретними? Яка ОС?
Кріс Пейдж

2

Більшість цих даних, як правило, піддаються віртуальним файлам / примитивної файлової системи. Кожен процес має запис в / proc в каталозі, який називається PID. Отже / proc / 5437 матиме примітиви для процесу 5437. Читання примітивів та їх відповідний розбір би все-таки закрили те, що робить верх.

Top фактично працює, викликаючи конкретні виклики функцій, які витягують цю інформацію безпосередньо з ядра, а не витягують її з файлів. Для того, щоб зробити те ж саме з bash, вам доведеться або витягнути його з віртуальної файлової системи / proc, або витягнути його з інших викликів, таких як ps.

Що стосується реального часу, то це не зовсім можливо на рівні деталізації, що надає верх. Ви можете нарізати час досить тонко, щоб він виглядав у режимі реального часу, але ви все одно отримаєте відрізки часу.


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.