11 votes

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

Après la mise à jour vers 10.8.0, chaque fois que je fais une 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 , .zshrc tout ce à quoi j'ai pu penser, et je ne vois rien qui soit lié à la DYLD_ l'environnement.

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

unset LD_LIBRARY_PATH  
unset DYLD_LIBRARY_PATH

Mais le message ennuyeux apparaît toujours.

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

6voto

gabedwrds Points 2650

Avez-vous d'autres variables DYLD_ définies ? Exécuter set sans paramètres pour voir toutes les variables et désactiver tout ce qui se présente avec ce préfixe.

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

De plus, la mise à jour vers 10.8.1 semble avoir corrigé ce problème.

3voto

BenM Points 2241

Dans 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 sont désactivées, puis exécute sudo.

Les avantages par rapport à d'autres réponses sont les suivants :

  • Ne supprime pas LD_LIBRARY_PATH et DYLD_LIBRARY_PATH de votre environnement 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 qu'il est en cours d'exécution (par exemple, avec Ctrl-C), votre LD_LIBRARY_PATH et votre DYLD_LIBRARY_PATH resteront inchangés dans votre shell principal (contrairement au script d'une autre réponse qui les définit et les annule dans le shell interactif).
  • L'utilisation de exec permet de s'assurer que l'interpréteur de commandes parent, qui n'est pas nécessaire, se termine immédiatement lors de l'invocation de sudo, de sorte qu'il n'y a pas de processus supplémentaire qui traîne pendant l'exécution de la commande.

Je laisse au lecteur l'exercice de porter à bash, et al.

2voto

Joe Phillips Points 1371

Solution trouvée sur les forums de support d'apple par yokyoh1987,

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

dans votre .profile/.bashrc/.bash_profile (en fonction de la configuration de votre terminal) :

\# set DYLD\_\* for my normal programs
DYLD\_LIBRARY\_PATH='..'

# set an alternative sudo
thesudo()
{
# back up the DYLD\_\* variables
local BACK=$DYLD\_LIBRARY\_PATH

# unset DYLD\_\*
unset DYLD\_LIBRARY\_PATH

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

# restore DYLD\_\* after sudo finished
export DYLD\_LIBRARY\_PATH=$BACK
}

# redirect sudo
alias sudo=thesudo

-3voto

user37093 Points 111

Vous avez probablement défini votre LD_LIBRARY_PATH.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X