Le message ennuyeux de sudo peut-il être supprimé de Mountain Lion 10.8.0?

11

Après la mise à niveau vers 10.8.0, chaque fois que je fais un sudo, je reçois toujours ce message:

dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid

J'ai vérifié mon .bash_profile, .zshrctout ce à quoi je pouvais penser, et je ne vois rien de lié à l' DYLD_environnement.

Après avoir googlé pendant des heures, j'ai essayé de mettre ces deux lignes dans mon .zshrc:

unset LD_LIBRARY_PATH  
unset DYLD_LIBRARY_PATH

Mais le message ennuyeux apparaît toujours.

Je vais sur un compte invité et j'ai fait un sudomais je n'ai pas reçu ce message. Donc je suppose que j'ai une bibliothèque personnalisée installée ... Mais je ne sais pas comment déboguer cela.

BPm
la source

Réponses:

6

Avez-vous défini d'autres variables DYLD_? Exécutez setsans paramètres pour voir toutes les variables et annuler tout ce qui vient avec ce préfixe.

Notez qu'il semble que ce soit juste une solution de contournement pour un bogue, ces messages ne doivent pas être imprimés à moins que DYLD_PRINT_WARNINGS ne soit activé.

De plus, la mise à jour vers 10.8.1 semble avoir corrigé cette gêne.

gabedwrds
la source
1
Bug ML, pour autant que je sache. Ces variables DYLD_ peuvent être importantes, leur suppression peut casser tout ce pour quoi elles ont été définies.
gabedwrds
2
Eh bien, le bogue est que vous n'êtes pas censé voir ces messages sauf si vous définissez la variable d'environnement DYLD_PRINT_WARNINGS, mais pour une raison quelconque, Mountain Lion les imprime dans les deux sens.
gabedwrds
2
10.8.1 N'a pas résolu le problème
Matteo
2
La suppression de toutes les variables d'environnement DYLD_ n'est pas une solution car elles sont là pour une raison. C'est un bug et nous sommes coincés avec lui jusqu'à ce qu'Apple le corrige.
Matteo
2
J'ai ce problème le 10.8.3
Alex Szatmary
3

En zsh:

 sudo () { ( unset LD_LIBRARY_PATH DYLD_LIBRARY_PATH; exec command sudo $* ) }

Cela génère un sous-shell dans lequel les variables d'environnement dont sudo se plaint ne sont pas définies, puis exécute sudo.

Les avantages par rapport à certaines des autres réponses incluent:

  • Ne supprime pas LD_LIBRARY_PATH et DYLD_LIBRARY_PATH de votre environnement de shell interactif (pour les commandes non sudo qui en ont besoin).
  • L'utilisation d'un sous-shell garantit que si vous interrompez le sudo pendant son exécution (par exemple, avec Ctrl-C), vos LD_LIBRARY_PATH et DYLD_LIBRARY_PATH seront inchangés dans votre shell principal (contrairement au script dans une autre réponse qui les définit et les désactive dans le shell interactif ).
  • L'utilisation d'exec garantit que le shell parent autrement inutile se ferme immédiatement lors de l'appel de sudo, il n'y a donc pas de processus supplémentaires pendant l'exécution de la commande.

Je vais laisser le lecteur faire un exercice à bash, et al.

Pinko
la source
"Je vais laisser au lecteur un exercice à porter sur bash, et al." Parce que la plupart des utilisateurs d'Apple utilisent ZSH sur le Bash (sarcasme) préinstallé.
Jonathan Dumaine
2

contournement trouvé sur les forums de support Apple par yokyoh1987,

https://discussions.apple.com/thread/4143805?start=30&tstart=0

dans votre .profile / .bashrc / .bash_profile (dépend de votre configuration de terminal):

# définir DYLD_ * pour mes programmes normaux
DYLD_LIBRARY_PATH = '..'

# définir un sudo alternatif
thesudo ()
{
# sauvegarder les variables DYLD_ *
RETOUR local = $ DYLD_LIBRARY_PATH

# unset DYLD_ *
unset DYLD_LIBRARY_PATH

# appeler sudo
/ usr / bin / sudo "$ @"

# restaurer DYLD_ * après la fin de sudo
export DYLD_LIBRARY_PATH = $ BACK
}

# sudo de redirection
alias sudo = thesudo
Brendon-Van-Heyzen
la source
C'est un petit morceau intelligent de gestion d'env.
bmike
Un problème avec cette solution est que si vous interrompez le sudo (par exemple, via ctrl-c) votre var DYLD_LIBRARY_PATH restera silencieusement non définie dans votre shell interactif car l'opération de restauration à la fin ne sera pas exécutée. L'utilisation d'un sous-shell (voir mon autre réponse à cette question) résout ce problème.
Pinko
-3

Vous avez probablement votre ensemble LD_LIBRARY_PATH.

user37093
la source
2
Comme l'affiche l'affiche, il l'a déjà fait unset LD_LIBRARY_PATHet le problème persiste.
myhd