Finalmente resolvi isso com um alias:
alias sudo='sudo PATH="$PATH" HOME="$HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH"'
Certifique-se de usar aspas simples, para que as variáveis sejam expandidas no momento da invocação, não no momento em que o alias é definido.
Este:
- preserva HOME (que de outra forma é definido como / root)
- preserva PATH (que de outra forma é definido como um caminho 'seguro' em suders)
- preserva o valor atual de LD_LIBRARY_PATH (que, de outra forma, fica em branco)
(Você pode ver como as coisas são definidas com sudo bash -c "echo $HOME"
:)
Estou trabalhando com drivers personalizados e sempre tenho que sudo meus programas de teste para acessar o driver. Não quero instalar versões de teste de bibliotecas na área do sistema, portanto, uso LD_LIBRARY_PATH para configurar um diretório de teste específico, conforme necessário. Não consigo definir um LD_LIBRARY_PATH fixo, preciso alterá-lo e manter a configuração atual. Preservar PATH e HOME me dá acesso ao meu ambiente de trabalho - scripts e estrutura de diretórios.
Esse alias evita ter que conceder permissões gerais em sudoers ... e aparentemente não há solução alternativa para LD_LIBRARY_PATH, independentemente das configurações do sudoers. Ele não funciona no sudo dentro dos scripts, mas esses podem ser codificados conforme necessário.
~/.bashrc