отправить команду в уже запущенный сеанс экрана

20923
Der Hochstapler

Я пытался отправить команды на сеанс работы экрана GNU (4.00.03) в opensolaris, но не могу заставить его запускать какие-либо команды с помощью любой комбинации screen -X

Хорошо, я начал сеанс экрана с screen -S test, а затем попытался с помощью, screen -r -X "date"чтобы просто показать мне дату, когда я снова подключусь к нему. Но ни сообщения об ошибке, ни вывода на экран не произошло. Я пробовал с таким количеством комбинаций, что даже не помню.

Любые советы о том, как это сделать?

Причина, по которой я это делаю, заключается в том, что у меня есть программа, которая не является демоном, и я хочу запустить ее в сеансе экрана, чтобы позже я смог увидеть, что происходит.

9
кажется, как будто эта «команда», о которой они говорят на страницах руководства, предназначена для экранной команды, такой как настройки самого сеанса экрана. Вместо отправки команд для оболочки, которая открывается в сеансе экрана. Итак, кто-нибудь идея, как сделать это с помощью сценария Bash ?? 14 лет назад 0
@Axon: Да, -X отправляет команды экрана, а не команды оболочки, но на экране есть команда 'screen', которая может открывать новые окна экрана. 14 лет назад 0

3 ответа на вопрос

17
thegatekeeper

На самом деле все довольно просто. Вы можете использовать следующее:

screen -S sessionname -X stuff 'command'`echo -ne '\015'` 

echo -ne '\015'эмулирует нажатие Enterклавиши.

ПРИМЕЧАНИЕ: этот «материал» является экранной командой. http://www.gnu.org/software/screen/manual/screen.html#Stuff

Не могли бы вы уточнить, что представляет собой «материал»? Это имя ... или команда ... или другие параметры? Cerin 12 лет назад 0
На самом деле это работает, но я бы не сказал, что это так или иначе;) Это что-то вроде передачи нажатых клавиш и перехода на новую строку на экране. Разве нет обычной команды выполнения экрана ...? ducin 11 лет назад 0
@Cecin: `stuff` - это экранная команда для« вставки »строки в стандартный ввод konrad 11 лет назад 0
Это очень хорошо, но по какой-то причине не работает с "screen -RdS sessionname -X stuff 'ls -l'`echo -ne' \ 015'`", почему? e271p314 10 лет назад 0
это не работает, если я не запускаю команду дважды ... и в отдельных командных строках ... если я выполняю `screen -d -m -S sessionname; screen -S sessionname -X [...] `ничего не будет работать даже` (screen -d -m -S sessionname &) & sleep 10; screen -S sessionname -X [...] `ничего не делает, кроме создания нового экрана сеанс, который ничего не делает. вниз голосования user3338098 8 лет назад 0
это не работает для меня ... не эмулирует клавишу ввода ... Tanner Strunk 6 лет назад 0
4

Звучит так, как вы хотите:

$ screen -S test -d -m -c / dev / null - sh -c 'date; exec $ SHELL '  -S тест: назовите этот сеанс -d -m: стартовый экран отключен -c / dev / null: игнорировать ~ / .screenrc (укажите другой файл или удалите эту опцию, по мере необходимости) -: конец экрана sh-c 'дата; exec $ SHELL ': команда для запуска экрана, обратите внимание, что если эта команда было просто «дата», то экран немедленно закрылся. если вы не хотите выходить После выхода из команды, вы можете использовать: $ screen -S test -d -m -c / dev / null - ваша команда здесь 

Или, может быть, вы просто хотите dtach .

Запуск этого ничего не дает. Нет сообщений об успехах или ошибках, но `screen -list` показывает, что сессии не открыты. Cerin 12 лет назад 0
Этот ответ работал на меня. Ключ был - чтобы закончить параметры экрана. Plazgoth 8 лет назад 0
1
Jeremy Kao
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>] 

Откройте новое окно (с заголовком заголовка ) в существующем сеансе с именем session_name и выполните shell_command (с необязательными аргументами args )

Похожие вопросы