Czy denerwująca wiadomość sudo może zostać usunięta z Mountain Lion 10.8.0?

11

Po aktualizacji do wersji 10.8.0 za każdym razem, gdy to robię sudo, zawsze pojawia się ten komunikat:

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

Ja sprawdziłem .bash_profile, .zshrcwszystko, co mogłem myśleć, i nie widzę nic związanego z DYLD_otoczeniem.

Po godzinnym googlowaniu próbowałem umieścić te dwie linie w moim .zshrc:

unset LD_LIBRARY_PATH  
unset DYLD_LIBRARY_PATH

Ale irytująca wiadomość wciąż się pojawia.

Idę na konto gościa i zrobiłem, sudoale nie dostałem tej wiadomości. Więc chyba mam zainstalowaną bibliotekę niestandardową ... Ale nie wiem, jak to debugować.

BPm
źródło

Odpowiedzi:

6

Czy masz jakieś inne zmienne DYLD_? Uruchom setbez parametrów, aby zobaczyć wszystkie zmienne i rozbroić wszystko, co pojawi się z tym prefiksem.

Zauważ, że wygląda na to, że jest to tylko obejście błędu, wiadomości te nie powinny być drukowane, chyba że masz włączone DYLD_PRINT_WARNINGS.

Wydaje się, że aktualizacja 10.8.1 załatała tę irytację.

gabedwrds
źródło
1
Błąd ML, o ile wiem. Te zmienne DYLD_ mogą być ważne, ich usunięcie może uszkodzić wszystko, dla czego zostały ustawione.
gabedwrds
2
Błąd polega na tym, że nie powinieneś widzieć tych wiadomości, chyba że ustawisz zmienną środowiskową DYLD_PRINT_WARNINGS, ale z jakiegoś powodu Mountain Lion drukuje je w obu kierunkach.
gabedwrds
2
10.8.1 Nie naprawiłem problemu
Matteo,
2
Usunięcie wszystkich zmiennych środowiskowych DYLD_ nie jest rozwiązaniem, ponieważ istnieją one z jakiegoś powodu. To błąd i utkniemy z nim, dopóki Apple go nie naprawi.
Matteo,
2
Mam ten problem 10.8.3
Alex Szatmary
3

W Zsh:

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

Spowoduje to odroczenie podpowłoki, w której zmienne środowiskowe, na które narzeka sudo, są rozbrojone, a następnie wykonuje sudo.

Zalety w stosunku do niektórych innych odpowiedzi obejmują:

  • Nie usuwa LD_LIBRARY_PATH i DYLD_LIBRARY_PATH ze środowiska interaktywnej powłoki (dla potrzebnych poleceń innych niż sudo).
  • Zastosowanie podpowłoki zapewnia, że ​​jeśli przerwiesz sudo podczas jego działania (np. Za pomocą Ctrl-C), twoje LD_LIBRARY_PATH i DYLD_LIBRARY_PATH pozostaną niezmienione w twojej głównej powłoce (w przeciwieństwie do skryptu w innej odpowiedzi, która ustawia je i rozłącza w interaktywnej powłoce ).
  • Użycie exec zapewnia, że ​​niepotrzebna powłoka nadrzędna natychmiast kończy działanie podczas wywoływania sudo, więc nie ma żadnych dodatkowych procesów zawieszających się podczas działania polecenia.

Zostawię to jako ćwiczenie dla czytelnika, aby przenieść się do bash, i in.

Pinko
źródło
„Zostawię to jako ćwiczenie dla czytelnika, aby poruszyć się, i tak dalej”. Ponieważ większość użytkowników Apple używa ZSH zamiast preinstalowanego Bash (sarkazm).
Jonathan Dumaine
2

obejść znalezione na forach wsparcia Apple przez yokyoh1987,

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

w twoim .profile / .bashrc / .bash_profile (zależy od twojego ustawienia terminala):

# ustaw DYLD_ * dla moich normalnych programów
DYLD_LIBRARY_PATH = „..”

# ustaw alternatywne sudo
thesudo ()
{
# wykonaj kopię zapasową zmiennych DYLD_ *
lokalne BACK = $ DYLD_LIBRARY_PATH

# unset DYLD_ *
rozbroić DYLD_LIBRARY_PATH

# dzwonienie do sudo
/ usr / bin / sudo "$ @"

# przywróć DYLD_ * po zakończeniu sudo
eksport DYLD_LIBRARY_PATH = $ BACK
}

# przekieruj sudo
alias sudo = thesudo
Brendon-Van-Heyzen
źródło
To sprytny kawałek zarządzania env.
bmike
Jednym z problemów związanych z tym rozwiązaniem jest to, że jeśli przerwiesz sudo (np. Przez ctrl-c), twój DYLD_LIBRARY_PATH var pozostanie cicho ustawiony w interaktywnej powłoce, ponieważ operacja przywracania na końcu nie zostanie wykonana. Użycie podpowłoki (patrz moja inna odpowiedź na to pytanie) rozwiązuje to.
Pinko
-3

Prawdopodobnie masz ustawiony LD_LIBRARY_PATH.

użytkownik37093
źródło
2
Jak pisze plakat, on już ma unset LD_LIBRARY_PATH, a problem nadal występuje.
myhd