A mensagem irritante do sudo pode ser removida do Mountain Lion 10.8.0?

11

Após a atualização para 10.8.0, sempre que faço um sudo, sempre recebo esta mensagem:

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

Fui verificar o meu .bash_profile, .zshrctudo o que eu poderia pensar, e eu não vejo qualquer coisa relacionada ao DYLD_meio ambiente.

Depois de pesquisar por horas, tentei colocar essas duas linhas no meu .zshrc:

unset LD_LIBRARY_PATH  
unset DYLD_LIBRARY_PATH

Mas a mensagem irritante ainda aparece.

Vou a uma conta de convidado e sudorecebi uma mensagem, mas não recebi. Acho que tenho uma biblioteca personalizada instalada ... Mas não sei como depurar isso.

BPm
fonte

Respostas:

6

Você tem outras variáveis ​​DYLD_ definidas? Execute setsem parâmetros para ver todas as variáveis ​​e desmarque tudo o que vier com esse prefixo.

Observe que parece que isso é realmente apenas uma solução alternativa para um bug. Essas mensagens não devem ser impressas, a menos que você tenha DYLD_PRINT_WARNINGS ativado.

Além disso, a atualização para 10.8.1 parece ter corrigido esse aborrecimento.

gabedwrds
fonte
1
Bug ML, tanto quanto eu posso dizer. Essas variáveis ​​DYLD_ podem ser importantes, removê-las pode quebrar o que foram definidas.
30812 Gabedwrds
2
Bem, o problema é que você não deve ver essas mensagens, a menos que defina a variável de ambiente DYLD_PRINT_WARNINGS, mas por algum motivo o Mountain Lion as imprime de qualquer maneira.
30812 Gabedwrds
2
10.8.1 não corrigir o problema
Matteo
2
Desativar todas as variáveis ​​de ambiente DYLD_ não é uma solução, pois elas existem por um motivo. É um bug e estamos presos até que a Apple o conserte.
Matteo
2
Eu tenho esse problema em 10.8.3
Alex Szatmary
3

No zsh:

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

Isso gera um sub-shell no qual as variáveis ​​de ambiente que o sudo reclama são desabilitadas e, em seguida, executa o sudo.

As vantagens sobre algumas das outras respostas incluem:

  • Não remove LD_LIBRARY_PATH e DYLD_LIBRARY_PATH do seu ambiente de shell interativo (para comandos não sudo que precisam).
  • O uso de um subshell garante que, se você interromper o sudo enquanto estiver em execução (por exemplo, com Ctrl-C), seu LD_LIBRARY_PATH e DYLD_LIBRARY_PATH permanecerão inalterados em seu shell mestre (ao contrário do script em outra resposta que os define e desativa no shell interativo )
  • O uso de exec garante que o shell pai desnecessário saia imediatamente ao chamar o sudo, para que não haja processos adicionais por aí enquanto o comando é executado.

Vou deixar como um exercício para o leitor portar para bater, et al.

Pinko
fonte
"Vou deixar como um exercício para o leitor portar para bater, et al." Como a maioria dos usuários da Apple usa o ZSH no Bash (sarcasmo) pré-instalado.
Jonathan Dumaine
2

solução alternativa encontrada nos fóruns de suporte da Apple por yokyoh1987,

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

no seu .profile / .bashrc / .bash_profile (depende da configuração do seu terminal):

# definir DYLD_ * para meus programas normais
DYLD_LIBRARY_PATH = '..'

# define um sudo alternativo
thesudo ()
{
# faça backup das variáveis ​​DYLD_ *
local BACK = $ DYLD_LIBRARY_PATH

# não definido DYLD_ *
desconfigurar DYLD_LIBRARY_PATH

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

# restore DYLD_ * após a conclusão do sudo
exportar DYLD_LIBRARY_PATH = $ BACK
}

# redirect sudo
alias sudo = thesudo
Brendon-Van-Heyzen
fonte
Esse é um pequeno pedaço inteligente de gerenciamento de ambiente.
bmike
Um problema com esta solução é que, se você interromper o sudo (por exemplo, via ctrl-c), sua var DYLD_LIBRARY_PATH será deixada silenciosamente desabilitada em seu shell interativo, porque a operação de restauração no final não será executada. Usar um subshell (veja minha outra resposta a esta pergunta) resolve isso.
Pinko
-3

Você provavelmente tem seu LD_LIBRARY_PATH definido.

user37093
fonte
2
Como o cartaz escreve, ele já o fez unset LD_LIBRARY_PATHe o problema persiste.
Mydd 22/12/12