Присоединение к сеансу screen с созданием нового окна экрана

У меня запущен сеанс экрана с несколькими окнами. Я хочу присоединиться к нему, создать в нем новое экранное окно и запустить оболочку в этом новом окне.

Вопрос: как это сделать из командной строки вне сеанса экрана?

Я уже много пробовал, т.е. г. screen -x (но он прикрепляется к одному из существующих окон экрана; он не создает новое и не запускает новую оболочку). Любые подсказки приветствуются.

Среда - Linux (Ubuntu 12.04).


person Alfe    schedule 15.05.2012    source источник
comment
Похоже, стандартного способа сделать это не существует. Вы можете выполнить поиск в списке рассылки   -  person tuxuday    schedule 15.05.2012
comment
Я бы принял это как ответ, потому что я кое-что нашел там, спасибо! :)   -  person Alfe    schedule 15.05.2012
comment
@Alfe, если вы нашли правильный ответ, опубликуйте его самостоятельно. Вы можете принять свой ответ через некоторое время, если это правильный ответ. Кроме того, мне любопытно: P   -  person KurzedMetal    schedule 15.05.2012


Ответы (3)


Чтобы выбрать окно, к которому нужно присоединиться, используйте параметр -p. Если указать +, будет создан новый, поэтому ваша команда проста:

screen -x session_name -p +

Это задокументировано на странице руководства:

-p n̲u̲m̲b̲e̲r̲_o̲r̲_n̲a̲m̲e̲|̲-̲|̲=̲|̲+̲

Preselect a window. This is useful when you want to reattach to a  
specific windor or you want to send a command via the "-X" option  
to a specific window. As with screen's select commant, "-" selects  
the blank window. As a special case for reattach, "=" brings up the  
windowlist on the blank window. 
person zondo    schedule 04.03.2017
comment
Я снова просмотрел свою страницу руководства (версия 4.00.03jw4) и нашел только -p number_or_name (не |-|=|+). Затем я посмотрел на немного более новую версию (4.01.00devel) и нашел ваш синопсис. Сбивает с толку то, что вставленный вами текст взят со старой страницы руководства (ничего не описывающей о +), в то время как на новой странице руководства в моих тестах был этот дополнительный текст, описывающий +: … while a "+" will create a new window. The command will not be executed if the specified window could not be found. Так что это новый вариант! Спасибо, что указали на это, я думаю, что это решит мою проблему. - person Alfe; 05.03.2017

Я нашел кое-что в списке рассылки, спасибо tuxuday :)

Я делаю это сейчас так:

#!/bin/bash
screen -X screen -t NEWWINDOW  # create new window (switches existing attached terminal)
sleep 0.1
screen -X other  # switch existing attached terminal back to its old window
sleep 0.1
gnome-terminal -e 'screen -x -p NEWWINDOW'  # connect to new window

Я не уверен насчет этих снов, возможно, они не нужны во всех средах, но я могу легко подождать эти 0,2 секунды.

Моя .bash_aliases меняет заголовок окна экрана с задержкой, так что неудобный NEWWINDOW не задержится надолго (и, следовательно, не будет мешать дальнейшим вызовам этого скрипта).

person Alfe    schedule 15.05.2012
comment
Уловка, которую я получил из списка рассылки, была screen -X other. - person Alfe; 15.05.2012
comment
взгляните на этот запись в блоге. Он рекомендует использовать командный файл сеанса (просто файл со всеми командами, такими как screen, select и other) и запускать screen -X source sessionfile вместо вызова screen -X несколько раз. Хороший подход - person KurzedMetal; 15.05.2012
comment
Я вызываю screen -X всего два раза ... но если этот скрипт разрастется, стоит взглянуть на подход с использованием командного файла сеанса :) - person Alfe; 15.05.2012
comment
Да, вы правы, я просто указал на нее, потому что нашел ее аккуратной. - person KurzedMetal; 15.05.2012

Добавьте новое отдельное окно в sesion_name и запустите command

screen -S sesion_name -x -X screen bash -c 'command; exec bash'
person Yuriy Tumakha    schedule 26.06.2016