L'exécution screen
en bash efface la variable LD_LIBRARY_PATH. J'ai fait quelques lectures et il semble que ce soit un comportement attendu, mais je dois le contourner.
La solution de contournement consiste à ajouter la déclaration LD_LIBRARY_PATH à ~/.bashrc
. Dans mon cas, LD_LIBRARY_PATH est beaucoup changé entre le lancement du shell et lorsque j'appelle l'écran, j'ai donc besoin d'obtenir la valeur actuelle de LD_LIBRARY_PATH dans la screen
session.
bash
environment-variables
gnu-screen
Andrew Wood
la source
la source
Réponses:
screen
ne désactive pas la variable d'environnement; il est supprimé par Linux lui-même.Sur la plupart des systèmes, l'
/usr/bin/screen
exécutable est installé avec le bit setgid pour leutmp
groupe, afin de pouvoir modifier lautmp
base de données. Il utilise également setgid pour contrôler l'accès au répertoire socket (/var/run/screen/
).Sous Linux, lorsqu'un programme setuid (ou setgid ) est exécuté, il ne reçoit pas certaines variables d'environnement (y compris
LD_LIBRARY_PATH
, plusieurs autresLD_*
variables, etHOSTALIASES
), afin de réduire les points d'attaque possibles: Sinon, vous pourriez écrire une petite bibliothèque et trompersu
ousudo
en appelant ainsi vos fonctions "améliorées".Vous pouvez supprimer le bit setgid de
screen
, mais vous devrez rendre le répertoire socket entièrement accessible à tous (mode 0777). Cela ne devrait pas être un risque pour la sécurité, carscreen
il vérifie également l'UID de l'attacheur lui-même.Cependant, vous ne devez pas rendre la
utmp
base de données accessible en écriture.la source
chgrp root $(which screen)
etchmod 777 /var/run/screen
. Vous pouvez tester avec ce petit script bash:while true; do echo $LD_LIBRARY_PATH; sleep 2; done
vous verrez que le chemin est correctement affiché. Merci grawity.Dans votre
.screenrc
, vous pouvez utiliser lasetenv
commande pour définir une valeur dans l'environnement de l'écran.Ceci est défini avant le démarrage de votre shell. De toute évidence,
LD_LIBRARY_PATH_SCREEN
doit être défini avant de démarrer l'écran.la source
_SCREEN
ci peut être défini dans votre fichier rc ou dans un script wrapper qui démarre l'écran.Essayez
export
la variable d'environnement qui vous intéresse.la source