A execução screen
no bash limpa a variável LD_LIBRARY_PATH. Eu li algumas coisas e parece que esse é um comportamento esperado, mas preciso contornar isso.
A solução alternativa é adicionar a declaração LD_LIBRARY_PATH a ~/.bashrc
. No meu caso, LD_LIBRARY_PATH é alterado muito entre o lançamento do shell e quando invoco a tela, portanto, preciso inserir o valor atual de LD_LIBRARY_PATH na screen
sessão.
bash
environment-variables
gnu-screen
Andrew Wood
fonte
fonte
Respostas:
screen
não desativa a variável de ambiente; é removido pelo próprio Linux.Na maioria dos sistemas, o
/usr/bin/screen
executável é instalado com o setgid bit forutmp
group, para poder modificar outmp
banco de dados. Ele também usa setgid para controlar o acesso ao diretório do soquete (/var/run/screen/
).No Linux, quando um setuid (ou setgid ) programa é executado, ele não recebe certas variáveis de ambiente (incluindo
LD_LIBRARY_PATH
, várias outrasLD_*
variáveis, eHOSTALIASES
), a fim de reduzir os possíveis pontos de ataque: Caso contrário, você poderia escrever uma pequena biblioteca e truquesu
ousudo
para chamar suas funções "aprimoradas" dessa maneira.Você pode remover o bit setgid
screen
, mas precisará tornar o diretório do soquete totalmente acessível a todos (modo 0777). Não deve ser um risco de segurança, comoscreen
também verifica o próprio UID do attacher.No entanto, você não deve tornar o
utmp
banco de dados gravável mundialmente.fonte
chgrp root $(which screen)
echmod 777 /var/run/screen
. Você pode testar com este pequeno script bash:while true; do echo $LD_LIBRARY_PATH; sleep 2; done
Você verá que o caminho é exibido com sucesso. Graças grawity.No seu
.screenrc
, você pode usar osetenv
comando para definir um valor no ambiente da tela.Isso é definido antes do seu shell ser iniciado. Obviamente,
LD_LIBRARY_PATH_SCREEN
precisa ser definido antes de você iniciar a tela.fonte
_SCREEN
um pode ser definido em seu arquivo rc ou em um script que inicia tela.Tentando
export
a variável de ambiente em que você está interessado.fonte