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

11

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

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

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

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

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

Ответы:

18

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

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

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

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

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

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

$ 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
Этот ответ работал для меня. Ключ был - чтобы закончить параметры экрана.
Плазгот
1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

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

Джереми Као
источник