Можно ли удалить раздражающее сообщение sudo из 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, похоже, исправило это раздражение.

gabedwrds
источник
1
Ошибка ML, насколько я могу судить. Эти переменные DYLD_ могут быть важны, удаление их может нарушить то, для чего они были установлены.
gabedwrds
2
Проблема в том, что вы не должны видеть эти сообщения, если не установите переменную окружения DYLD_PRINT_WARNINGS, но по какой-то причине Mountain Lion печатает их в любом случае.
gabedwrds
2
10.8.1 Не удалось решить проблему
Маттео
2
Отключение всех переменных окружения DYLD_ не является решением, поскольку они существуют по определенной причине. Это ошибка, и мы застряли с ней, пока Apple ее не исправит.
Маттео
2
У меня есть эта проблема на 10.8.3
Алекс Szatmary
3

В зш:

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

Это порождает вложенную оболочку, в которой переменные среды, на которые жалуется sudo, не устанавливаются, а затем выполняет sudo.

Преимущества перед некоторыми другими ответами включают в себя:

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

Я оставлю это в качестве упражнения для читателя, чтобы портировать на bash, et al.

Pinko
источник
«Я оставлю это в качестве упражнения для читателя, чтобы портировать на bash и др.» Потому что большинство пользователей Apple используют ZSH поверх предустановленного Bash (сарказм).
Джонатан Думайн
2

Обход найден на форумах поддержки Apple, yokyoh1987,

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

в вашем .profile / .bashrc / .bash_profile (зависит от настроек терминала):

# установить DYLD_ * для моих обычных программ
DYLD_LIBRARY_PATH = '..'

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

# unset DYLD_ *
unset DYLD_LIBRARY_PATH

# вызов sudo
/ usr / bin / sudo "$ @"

# восстановить DYLD_ * после завершения sudo
export DYLD_LIBRARY_PATH = $ BACK
}

# перенаправить sudo
псевдоним sudo = thesudo
Брендон-Ван-Heyzen
источник
Это умная маленькая часть управления env.
bmike
Одна проблема с этим решением состоит в том, что если вы прервете sudo (например, с помощью ctrl-c), ваша переменная DYLD_LIBRARY_PATH будет молча оставаться неустановленной в вашей интерактивной оболочке, потому что операция восстановления в конце не будет выполнена. Использование подоболочки (см. Мой другой ответ на этот вопрос) решает эту проблему.
Pinko
-3

Возможно, у вас установлен LD_LIBRARY_PATH.

user37093
источник
2
Как пишет автор, он уже есть unset LD_LIBRARY_PATH, и проблема не устранена.
Myhd