tela GNU, como obter o nome da sessão atual programaticamente

5

[Esse pode ser considerado o passo 2 da minha pergunta anterior É possível alterar o nome da sessão da tela GNU após a criação? ]

Na verdade, eu gostaria de escrever um script que possa exibir o nome da sessão da tela atual e alterar o nome da sessão atual.

Por exemplo:

sren armcross

Ele mudará o nome da sessão para armcross (compilador cruzado gcc do ARM) e mostrará algo como:

screen session name changed from '25278.pts-15.linux-ic37' to 'armcross'

Então, a questão chave agora é como obter o nome da sessão atual. Não apenas para exibir o antigo nome da sessão, mas de acordo com É possível alterar o nome da sessão da tela GNU após a criação? , tenho que saber (passar para -d -r) antes que eu possa mudar para outra coisa.

Podemos usar $STY para o nome da sessão atual? Não. $STY não será alterado depois de você ter alterado o nome da sessão para um definido pelo usuário. No entanto, para o comando

screen -d -r <oldsessname> -X sessionname armcross

< oldsessname > deve ser o nome definido pelo usuário (se alguma vez definido) em vez de $STY , caso contrário, o erro de tela aparece "Nenhuma sessão de tela encontrada".

Talvez, haja uma maneira detalhada, use screen -list para listar todas as sessões (nome definido pelo usuário listado) e, em seguida, combine a parte pid de $ STY com as sessões listadas e encontraremos o nome definido pelo usuário da sessão atual . Não deveria ser tão detalhado para uma pergunta tão direta. Você não acha?

As opções -d -D e -r -R parecem expor muitos detalhes de implementação ao usuário da tela. Parece que, para renomear uma sessão, você precisa desanexá-la, fazer a renomeação e, em seguida, reconectá-la. Certo?

Meu env: opensuse 11.3, tela GNU 4.00.03 (FAU) 23-out-06

Obrigado.

    
por Jimm Chen 07.04.2012 / 04:48

2 respostas

3

você poderia tentar este aqui?

screen -d -r $(ps -o ppid -p $$ --no-headers) -X sessionname newsessionname

    
por 08.04.2012 / 17:21
1

Parece que quando você define a tela sessionname manualmente, altera o nome do arquivo relevante em /var/run/screen/S-$USER/ , mas não atualiza o valor de $STY , o que seria ideal.

Ainda podemos usar o valor original de $STY para obter o nome da sessão atual, já que $STY contém o PID relacionado a esse nome de sessão.

PID=$(echo $STY | awk -F"." '{ print $1}')

Você pode então usar o PID para obter o nome da sessão em / var / run / screen / S- $ USER

SESSIONNAME=$( ls /var/run/screen/S-$USER/$PID* | awk -F"." '{print $2}' )

Agora você tem o nome da sessão em SESSIONNAME , você pode fazer o que quiser com ele.

    
por 08.04.2012 / 18:17

Tags