screen: автоматическое создание или повторное подключение сеансов в разных конфигурациях

Что является чистым способом достижения, следуя функциональным возможностям:

function screen_create_or_reuse(){ if [ running_screen_session "$1" ]; then reattach_screen_session screen_name_"$1" else create_screen_session "$1" screen_config_"$1" screen_name_"$1" fi } 

В настоящее время мне приходится беспокоиться, если сеанс уже запущен ( screen -ls или screen -wipe ). В зависимости от этого, если он не запущен: создайте сеанс с настраиваемой конфигурацией и именем вручную ( screen -c config -S name ) и повторите попытку вручную. Мне screen_create_or_reuse name одна команда screen_create_or_reuse name которая обрабатывает все эти детали.

  • Экран GNU: у вас нет ни используемых сокетов, ни используемых труб
  • screen & xterm: как выбрать текст с помощью мыши в одной панели, когда окно разделено по вертикали
  • Есть ли способ показать предыдущие сообщения на экране?
  • Может ли сборщик отправлять данные, помеченные как хост, отличный от самого себя?
  • как изменить размер горизонтальной области экрана
  • Экран Linux: список экранных списков
  • Я подумал о создании сценария bash, который определяет наличие сеанса и т. Д., Но я вижу, что на экране уже много вариантов, может быть, я бы переусердствовал.

    Какой чистый способ достичь выше, с экраном?

  • Открытие нескольких разделенных окон с помощью экрана GNU с одним сценарием bash
  • Почему нажатие Ctrl-h в xterm + tmux отправляет «^?»?
  • Linux. Отправка команды на экран через сценарий оболочки?
  • Разрешение исходящих писем, которые будут доставлены только на localhost
  • Вертикальные линии не пересекаются в urxvt
  • Скопируйте большой (более 4k) выбор текста из буфера скроллинга экрана в системный буфер обмена
  • 2 Solutions collect form web for “screen: автоматическое создание или повторное подключение сеансов в разных конфигурациях”

    Следующий параметр man screen :

      -d -R Reattach a session and if necessary detach or even create it first. 

    Используйте его с -S для установки имени сеанса.

    По большей части -S foo -d -RR будет делать то, что вы хотите: он присоединяется к сеансу, имя которого вы указываете, и создает его, если оно уже не существует.

    Мне нравится идти немного дальше и искать файлы конфигурации, зависящие от имени. Это позволяет мне определять разные переменные среды, приложения запуска и т. Д. Для разных имен сеансов.

    Это мой файл etc/screen/0.screenrc , который предоставляется другими конфигурационными файлами, специфичными для сеанса:

     source ~/.screenrc unsetenv DISPLAY msgminwait 0 msgwait 0 screen -t post_initialization 39 sh -c 'sleep 1; screen -X msgwait 5; screen -X msgminwait 1' 

    Это пример файла конфигурации сеанса etc/term/emacs.screenrc , который запускает одно окно с Emacs (больше не полезно с Emacs 23, которое может подключаться к нескольким терминалам).

     sessionname emacs source 0.screenrc screen -t emacs emacs -nw 

    И это адаптированная версия сценария, который я использую для вызова этих сеансов. Назовите его, например, scr emacs чтобы выбрать сеанс, показанный выше. Если в файле ~/etc/screen нет файла конфигурации, соответствующего имени сеанса, я запускаю оболочку.

     #!/bin/sh session_name=$1; shift if [ -r "$HOME/etc/screen/$session_name.screenrc" ]; then exec screen -S "$session_name" -d -RR -c "$HOME/etc/screen/$session_name.screenrc" "$@" else if [ $# -eq 0 ]; then set "$SHELL"; fi exec screen -S "$session_name" -d -RR -c "$HOME/etc/screen/0.screenrc" "$@" fi 
    Linux и Unix - лучшая ОС в мире.