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.
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?
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.
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