Як отримати вихід у "екран" на сценарій?


33

У мене screenзапущений екземпляр, і мені потрібно буде виконати деякий код всередині screenі отримати результат у моєму сценарії.

Перша частина досить проста, я просто screen -S session_name -X eval 'stuff "$cmd"\015'.
(Я змінив рядок, знайдений у сценарії )

Друга частина, отримуючи вихід, є складнішою. Як я можу отримати весь вихід, незалежно від його розміру?



Дякую :) Друге посилання пояснило, чому повинна бути перша команда stuff, через що я мав проблеми з розумінням.
1ace

Відповіді:


29

Ви можете почати screenз -Lопції. Це призведе до того, що екран створить файл screenlog.n(n частина є числовою, починаючи з нуля) у поточному робочому каталозі.

У вашому випадку це виглядатиме приблизно так: screen -S session_name -L -X eval 'stuff "$cmd"\015'

Поки ви пам’ятаєте про прибирання після цього, це має відповідати тому, що ви хочете.

Для останнього рядка журналу його можна легко отримати tail -1 screenlog.0, або весь журнал можна проаналізувати, скільки завгодно.


Однак одне: screenкоманда, яку я дав, - просто відправити команду. Для запуску screenя використовував screen -dmS name program;-)
1ace

22

Ще один нюанс, який може бути корисним у майбутньому: Якщо ви перебуваєте на екрані, ви можете інтерактивно попросити створити файл журналу. Натисніть ctrl- a H(Control-A, а потім з великої літери H), щоб попросити екран починати скидання будь-якого вікна у файл журналу.


5
Не знаю, чи це через більш нову версію, але, як я man screenстверджує, я повинен набрати CA H, без пункту управління лише для H. Sad, що це не фіксує попередній журнал.
Матмарбон

2
Ти правий! CA H генерує файл журналу. Зверніть увагу, що це велика літера H (малі літери h видають лише копію поточного екрана).
rickumali

3
Будь ласка, оновіть відповідь на CA H. Майбутні шукачі можуть ввести в оману і пропустити правильну відповідь.
gc5

Хтось знає про спосіб надіслати команду через скрипт? Як і у відправці управління + a, а потім H через частку секунди.
Zach W.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.