screen: criação automática ou reconexão de sessões em diferentes configurações

1

O que é uma maneira limpa de alcançar, seguindo a funcionalidade:

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
}

Atualmente, tenho que me preocupar se a sessão já está em execução ( screen -ls ou screen -wipe ). Dependendo disso, se não estiver em execução: crie sessão com configuração personalizada e nome manualmente ( screen -c config -S name ) e reconecte manualmente. Eu gostaria de um comando screen_create_or_reuse name que lida com todos esses detalhes.

Eu pensei em criar um script bash que detecta a presença da sessão etc., mas vejo que a tela já tem muitas opções, talvez eu faça um exagero.

Qual é a maneira limpa de alcançar acima, com a tela?

    
por Grzegorz Wierzowiecki 29.11.2011 / 10:19

2 respostas

2

A seguinte opção é de man screen :

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

Use com -S para definir o nome da sessão.

    
por 29.11.2011 / 10:49
1

Na maior parte, -S foo -d -RR fará o que você deseja: anexa à sessão cujo nome você especifica e cria uma se já não existir.

Eu gosto de ir um pouco mais longe e procurar por arquivos de configuração específicos do nome. Isso me permite definir diferentes variáveis de ambiente, aplicativos de inicialização e assim por diante para diferentes nomes de sessão.

Este é o meu arquivo etc/screen/0.screenrc , que é originado por outros arquivos de configuração específicos da sessão:

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'

Este é um exemplo de arquivo de configuração por sessão etc/term/emacs.screenrc , que inicia uma janela executando o Emacs (não mais útil para o Emacs 23, que pode ser anexado a vários terminais).

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

E esta é uma versão adaptada do script que uso para invocar essas sessões. Chame-o com, por exemplo scr emacs para pegar a sessão mostrada acima. Se não houver nenhum arquivo de configuração correspondente ao nome da sessão em ~/etc/screen , eu executo um shell.

#!/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
    
por 29.11.2011 / 23:45