Aqui está uma resposta que não requer privilégios sudo ou a senha do usuário, mas ainda fornece um ambiente como o que você obteria em um novo login.
env -i HOME="$HOME" bash -l -c 'your_command'
Exemplo:
$ export ABC=123
$ env -i HOME="$HOME" bash -l -c 'env' | grep ABC
$ env HOME="$HOME" bash -l -c 'env' | grep ABC
ABC=123
Quebrando isso para explicação:
-
env -i HOME="$HOME": apaga o ambiente. O-iconfigura um ambiente vazio com sem variáveis alguma . Isso é problemático porque significa que, se você tentar ingenuamente executarbash -l, ele não carregará seu.bash_profileetc. porqueHOMEnão está definido. Para atenuar isso, passamos explicitamenteHOME="$HOME", criando um ambiente no qualHOME(e apenasHOME) está definido. -
bash -l -c ...: Executa o comando desejado em um shell de login. Você vai querer um shell de login para isso, porque estamos começando de um ambiente limpo e precisamos recarregar tudo.
Notavelmente:
- Isso não requer privilégios sudo (a versão
sudofaz). - Isso não requer a digitação da senha do usuário (a versão
su). - Isso não requer a execução de um servidor SSH e uma chave sem senha que pode ser usada para efetuar login novamente na máquina (a versão
ssh).