Я хотел бы запустить некоторое приложение в сеансе экрана, но из сценария.
Без скрипта я бы просто запускал экран, затем открывал N окон с помощью crtl-ac и запускал программы в каждом из них.
Я попробовал следующее
screen -d -m -S test
screen -S test -X exec tail -f /var/log/messages
screen -S test -X screen
screen -S test -X exec tail -f /var/log/xinetd.log
Но когда я прикрепляю сессию, хвост не работает. Если я присоединяю сеанс сразу после этого screen -d -m -S startup
и запускаю screen -S startup -X exec tail -f /var/log/messages
из другого терминала, он работает.
Я что-то пропустил ?
Изменить после ответа AlexD:
Половинное рабочее решение
screen -d -m -S test tail -f /var/log/messages
screen -S test -X screen tail -f /var/log/xinetd.log
Цепная команда экрана (та, что после -X) с командой работает, в то время как exec, вероятно, не работает, потому что exec ожидает, что текущее окно будет определено, в то время как нет текущего, когда экран отключен. Спасибо AlexD за эти советы.
Но есть странный побочный эффект: когда программа останавливается (если вы присоединяете сеанс экрана и crtl-c хвост или убивает хвост), окно экрана закрывается.
Таким образом, поведение не совпадает с Crtl-A c и запустите команду.
Другой побочный эффект заключается в том, что вы не можете соединить 2 команды
screen
всегда завершается, когда запускается команда, с которой он был запущен - это обычная особенность инструмента :) .. так что если вы запускаетеscreen top
, когда вы выходитеtop
,screen
тоже завершается