Como definir a variável de ambiente 'screen' do bash?

4

Antecedentes

Eu uso virtualenv para alternar entre os ambientes "1.0" e "2.0".
Eu uso screen para gerenciar terminais.
Quando trabalho em um ambiente, quero que todas as novas janelas screen comecem com esse ambiente.

Pergunta

Pode o bash instruir screen para definir a variável de ambiente em novas instâncias do shell, para que eu possa criar um alias semelhante a este:

alias one='export PRJCT=1.0; screen-magic-setenv PRJCT=1.0; workon 1.0'
alias two='export PRJCT=2.0; screen-magic-setenv PRJCT=2.0; workon 2.0'

e depois em ~/.bashrc call:

[[ -z $PRJCT ]] || workon $PRJCT # switch to project if set

Eu sei que posso comandar screen para definir a variável de ambiente em novos shells como abaixo, mas isso não ajuda, pois não funciona em um alias:

:setenv PRJCT
2.0
    
por cprn 24.09.2014 / 10:18

1 resposta

5

Se eu entendi corretamente, seu problema é que você não consegue encontrar uma maneira de usar um alias de shell para interagir diretamente com a tela. Em vez disso, você pode enviar comandos para uma tela em execução usando -X , incluindo setenv , por exemplo:

$ screen -list
There are screens on:
    25216.pts-45.antiriad      (Attached)

$ screen -S 25216 -X setenv PRJCT 2.0

A variável é então definida e será herdada por shells filho a partir desse ponto, exatamente como com :setenv . Se você usar -S para definir nomes de sessão distintos sensíveis, sua tarefa poderá ser mais fácil. A variável STY mantém a atual sessão de tela.

Se você executar apenas screen -X setenv PRJCT 2.0 em uma sessão de tela, omitindo -S , ela será aplicada à instância da tela.

alias one='export PRJCT=1.0; screen -X setenv PRJCT 1.0; workon 1.0'
    
por 24.09.2014 / 11:36