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


11

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

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

Будь-які підказки, як це досягти?

Причина, чому я це роблю, полягає в тому, що у мене є програма, яка не сприймається як демон, і я хочу запустити її на екрані, щоб пізніше побачити, що відбувається.


1
здається, ніби ця "команда", про яку вони говорять на сторінках "man", призначена для екранної команди, як налаштування для самого сеансу на екрані. Замість того, щоб надсилати команди для оболонки, яка відкривається на екрані сеансу. Отже, комусь ідея, як це зробити з скриптом 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


Скажіть, будь ласка, що таке "речі"? Це ім'я ... чи команда ... чи інші параметри?
Серін

Це працює насправді, але я б не сказав, що це просто так;) Це щось на кшталт передачі подій, що стискаються клавішею, та передачі нової лінії на екран. Хіба немає просто звичайної команди для виконання екрана ...?
ducin

@Cecin: stuffце екранна команда «
забити

Це дуже добре, але чомусь це не працює з "screen-RdS sessionname -X речі '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 [...]нічого, крім створення нового екранного сеансу, який нічого не робить. голосування вниз
користувач3338098

5

Звучить так, як вам хочеться:

$ screen -S test -d -m -c / dev / null - sh -c 'дата; exec $ SHELL '

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

А може, ти просто хочеш дтач .


Запуск цього не призводить ні до чого. Немає повідомлень про успіх чи помилки, але screen -listпоказує, що сеанси не відкриті.
Серін

Ця відповідь спрацювала на мене. Ключовим було - припинити параметри екрана.
Плазгот

1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

Відкрийте нове вікно (із заголовком заголовка ) у існуючому сеансі з іменем session_name та виконайте shell_command (з необов'язковими аргументами аргументів )

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.