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 которая обрабатывает все эти детали.

Я подумал о создании сценария bash, который определяет наличие сеанса и т. Д., Но я вижу, что на экране уже много вариантов, может быть, я бы переусердствовал.

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

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 Mint
  • Linux и Unix - лучшая ОС в мире.