Я работаю над автоматизацией процедуры обслуживания, которая включает запуск и остановку сценария, который выполняется в сеансе экрана. Мой подход состоит в том, чтобы завершить сеанс экрана, а затем перезапустить его и запустить команду из сценария, используя возможности для создания экрана и передачи команды без необходимости присоединения к экрану.
Однако у меня возникают трудности с этим. Я могу правильно создать экран, не подключая его screen -d -m -S screen_name
. Однако, если я запускаю команду на основе:
screen -S screen_name-X stuff "command 1"'echo -ne '\015''"command 2"'echo -ne '\015''
с echo -ne '\ 015', заключенным в кавычки, а не в одинарные кавычки. Это для того, чтобы смоделировать пользователя, нажимающего клавишу ввода, поскольку команды, которые я использую, перемещаются в каталог и выполняют сценарий, расположенный там. Эта команда работает, но только если экран был прикреплен после того, как он был создан. Поскольку я пытаюсь автоматизировать процесс создания экрана и запуска команд внутри него, я бы хотел избежать присоединения и отсоединения внутри скрипта. Я попытаюсь предложить сценарий оболочки, содержащий команды, которые мне нужно выполнить на экране и редактировать в соответствии с моими результатами.
Есть ли способ создать экран и запустить команду на экране в виде одной команды или без необходимости прикрепления к экрану после создания, но перед выполнением команды?
Заранее спасибо.
** Обновление - попробовав предложение поместить команды, которые мне нужно выполнить, в сценарий оболочки, я смог успешно создать экран и выполнить команды изнутри экрана, но у меня возникает такое поведение, когда скрипт перестает работать экран также закрывается. Это не должно быть проблемой, так как сценарий является сценарием регистрации, который должен останавливаться только на знаниях администратора системы или сценария, который я пытаюсь разработать, однако было бы предпочтительным настроить экран таким образом, чтобы экран не исчезает, если скрипт остановлен. Возможно ли добиться такого поведения? **
источник
.screenrc
строкуzombie kr
, содержащую строку , которая будет держать готовое окно открытым, и вы можете нажать,k
чтобы закрыть winodw илиr
снова запустить команду в окне. У меня это по умолчанию .screenrc.Ответы:
Я думаю, что вы можете столкнуться с несколькими проблемами.
Если команда завершается до повторного присоединения, экран исчезнет. Вы можете продемонстрировать это с помощью:
Он запустит
ls -l
команду, ноscreen -list
не покажет ее, поскольку процесс экрана завершен.Я также понятия не имею, что вы пытаетесь сделать с этим \ 015 материалом. Возможно, обновление вашего вопроса поможет, поскольку, я думаю, вы пытаетесь выполнить несколько команд в сеансе экрана. Это должно быть так просто, как:
Если они часто используются, возможно, вам следует создать сценарий оболочки, который запускает только эти команды, а затем использовать более простой:
источник
screen -d -m ssh
будет отключен при запросе пароля перед началом сеанса.screen -list
. Кроме того, это не имя экрана, как пытается сделать ОП.screen -d -m python EventGenerator.py
, который работал отличноbash -c "commands"
вместоbash "commands"
Запустить отдельный экран
Выполнить команду на ранее созданном отдельном экране
Да, вам нужно ввести символ ввода, чтобы отправить команду, иначе она просто добавит строку на экран.
http://osdir.com/ml/gnu.screen/2003-09/msg00029.html
источник
stuff
на самом деле это команда, которая копирует и вставляет другую команду в сеанс экрана: stuff [string] Вставляет строку string во входной буфер текущего окна. Это похоже на команду «вставить», но с гораздо меньшими накладными расходами. Без параметра screen будет запрашивать строку для заполнения. Вы не можете вставлять большие буферы с помощью команды "stuff". Это наиболее полезно для привязки клавиш. Смотрите также «bindkey». [цитата из theterminallife.com/sending-commands-into-a-screen-session/]Я сталкивался с этой проблемой раньше, это была ошибка в реализации Cygwin.
Я создал файл «.screenrc_detaching», имеющий только следующую команду
а затем начать экран с
Затем у вас есть сеанс экрана, и он уже подключен и отключен, и вы можете подавать команды на него.
Легко ! :П
источник
Это сделало работу для меня, без
-c
не работалscreen -d -m bash -c "command1; command2; command3"
источник
Копировать и вставить способ проверить предыдущие ответы:
Ожидаемый результат должен быть похож на:
(Это означает, что ранее не было создано ни одного сеанса экрана)
(Это время, потраченное на создание экрана и отсоединение от него. Почти мгновенно.)
(Эти выходные данные показывают сеансы экрана. Создано по последней команде.)
(Это
cat
показывает имя хоста, выполненное внутри gnu-screen)источник
источник