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-i
configura 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_profile
etc. porqueHOME
nã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
sudo
faz). - 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
).