Isso ocorre porque sudo command executa command em sua própria subzela, iniciada por root . Isso significa que seu arquivo ~/.bashrc é ignorado. Isso também significa que quaisquer variáveis de ambiente definidas no shell pai (como o LD_PRELOAD que você está configurando em ~/.bashrc ) não são passadas para o shell sudo . Isso é explicado em man sudoers :
Por padrão, a opção env_reset está habilitada. Isso faz com que comandos para ser executado com um novo ambiente mínimo. No AIX (e no Linux sistemas sem PAM), o ambiente é inicializado com o conteúdo do arquivo / etc / environment . O novo ambiente contém TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME e SUDO_ * variáveis além de variáveis do processo de chamada permitido pelas opções env_check e env_keep . Isso é efetivamente uma lista de permissões para variáveis de ambiente.
Não consegui obter a opção env_keep para trabalhar aqui, não sei porquê. A melhor maneira que encontrei de passar a variável para sudo é criar um arquivo (por exemplo /path/to/foo ) com esta linha:
LD_PRELOAD="/home/terdon/Setups/stderred/build/libstderred.so"
Em seguida, execute sudo visudo e adicione esta linha:
Defaults env_file="/path/to/foo"
Isso fará com que sudo leia /path/to/foo e adicione quaisquer definições de variáveis ao seu ambiente.