Как получить вывод из `screen` в скрипт?

33

У меня screenзапущен экземпляр, и мне нужно выполнить некоторый код внутри screenи вывести результат в мой скрипт.

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

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

1ace
источник
1
Связанные: объяснениеscreen -X stuff … ; вопрос похож на твой .
Жиль "ТАК - перестань быть злым"
Спасибо :) Во второй ссылке было объяснено, почему должна быть первая команда stuff, что я с трудом понимал.
1

Ответы:

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), чтобы запросить экран, чтобы начать выгрузку любого окна, в котором вы находитесь, в файл журнала.

rickumali
источник
5
Не знаю, если это из-за более новой версии, но, по моему man screenмнению, я должен набрать CA H, только без Control для H. Sad, чтобы это не захватывало предыдущий журнал.
Матмарбон
2
Вы правы! Это CA H для создания файла журнала. Обратите внимание, что это заглавная буква H (строчная буква h дает только печатную копию текущего экрана).
Рикумали
3
Пожалуйста, обновите ответ в CA H. Будущие пользователи могут ввести в заблуждение и пропустить правильный ответ.
gc5
Кто-нибудь знает способ отправки команды через скрипт? Как при отправке управления + a, а затем H после доли секунды.
Зак В.