Чи можна прикрого повідомлення Судо зняти з Mountain Lion 10.8.0?


11

Після оновлення до 10.8.0 щоразу, коли я роблю це sudo, я завжди отримую це повідомлення:

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

Я перевірив своє .bash_profile, .zshrcвсе, що я міг придумати, і не бачу нічого, пов'язаного з DYLD_оточенням.

Після гуглінгу протягом декількох годин я намагався вкласти ці два рядки в своє .zshrc:

unset LD_LIBRARY_PATH  
unset DYLD_LIBRARY_PATH

Але дратівливе повідомлення все ж з’являється.

Я заходжу на рахунок гостя і зробив, sudoале не отримав це повідомлення. Тож я думаю, у мене встановлена ​​спеціальна бібліотека ... Але я не знаю, як це налагодити.

Відповіді:


6

Чи встановлені інші змінні DYLD_? Запустіть setбез параметрів, щоб побачити всі змінні та скасувати все, що виходить з цим префіксом.

Зауважте, що, схоже, це справді лише вирішення проблеми помилки, ці повідомлення не слід друкувати, якщо у вас не включено DYLD_PRINT_WARNINGS.

Також оновлення до 10.8.1, схоже, усунуло цю неприємність.


1
ML помилка, наскільки я можу сказати. Ці змінні DYLD_ можуть бути важливими, видалення їх може порушити все, для чого вони були встановлені.
gabedwrds

2
Ну, помилка в тому, що ви не повинні бачити ці повідомлення, якщо ви не встановите змінну середовища DYLD_PRINT_WARNINGS, але чомусь Mountain Lion друкує їх у будь-якому випадку.
gabedwrds

2
10.8.1 Не виправили проблему
Маттео

2
Видалення всіх змінних середовища DYLD_ не є рішенням, оскільки вони є з причини. Це помилка, і ми застрягли в ній, поки Apple не виправить це.
Маттео

2
У мене ця проблема є 10.8.3
Alex Szatmary

3

В zsh:

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

Це породжує під-оболонку, в якій змінені середовища, на які скаржиться sudo, не встановлені, а потім виконують sudo.

Переваги щодо деяких інших відповідей включають:

  • Не видаляє LD_LIBRARY_PATH та DYLD_LIBRARY_PATH із вашого інтерактивного середовища оболонки (для команд, які не потребують sudo).
  • Використання підпалубки гарантує, що якщо ви перервете судо під час його запуску (наприклад, із Ctrl-C), ваші LD_LIBRARY_PATH та DYLD_LIBRARY_PATH будуть незмінними у вашій головній оболонці (на відміну від сценарію в іншій відповіді, який встановлює та скасовує їх у інтерактивній оболонці ).
  • Використання exec гарантує, що інакше непотрібна батьківська оболонка негайно запускається при виклику sudo, тому немає ніяких додаткових процесів, що зависають під час виконання команди.

Я залишу це як вправу, щоб читач перейшов на баш, та ін.


"Я залишу це як вправу, щоб читач перейшов на баш, та ін." Тому що більшість користувачів Apple використовують ZSH через попередньо встановлений Bash (сарказм).
Джонатан Дюман

2

обхід знайдених на форумах підтримки яблук від yokyoh1987,

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

у вашому .profile / .bashrc / .bash_profile (залежить від налаштування терміналу):

# встановити DYLD_ * для моїх звичайних програм
DYLD_LIBRARY_PATH = '..'

# встановити альтернативне судо
thesudo ()
{
# створити резервну копію змінних DYLD_ *
локальний НАЗАД = $ DYLD_LIBRARY_PATH

# скинути DYLD_ *
скасувати DYLD_LIBRARY_PATH

# дзвони судо
/ usr / bin / sudo "$ @"

# відновлення DYLD_ * після завершення судо
експортувати DYLD_LIBRARY_PATH = $ НАЗАД
}

# перенаправлення судо
псевдонім sudo = thesudo

Це розумний маленький фрагмент управління env.
bmike

Одна з проблем цього рішення полягає в тому, що якщо ви перервете sudo (наприклад, через ctrl-c), ваш DYLD_LIBRARY_PATH var мовчки залишиться невідомим у вашій інтерактивній оболонці, оскільки операція відновлення в кінці не буде виконана. Використання підшару (див. Іншу відповідь на це питання) вирішує це.
Пінько

-3

Напевно, у вас встановлено LD_LIBRARY_PATH.


2
Як пише афіша, він вже є unset LD_LIBRARY_PATH, і проблема зберігається.
myhd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.