Existe uma maneira de executar um comando "como se" estivesse em uma nova sessão de logon?
Eu já tentei env -i
. No entanto, não quero lidar com várias variáveis ENV que tenho que definir ou desarmar.
Eu também tentei bash -c "some command"
e bash -l -c "some commmand"
, mas todos eles copiam o ambiente atual.
O mais próximo que cheguei é de uma solução do gueto: ssh me@localhost "some command"
/bin/bash --login
para obter esse comportamento. Eu uso, por exemplo, para obter um bom$PATH
./bin/bash --l
, que eu já tentei. Ele copia o ambiente original. Experimente:export SOME_VAL=something
. Então/bin/bash --login
. Entãoenv | grep SOME_VAL
. O valor estará lá.Respostas:
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.
Exemplo:
Analisando isso como explicação:
env -i HOME="$HOME"
: Limpa o ambiente. As-i
configura um ambiente vazio com nenhuma variável de qualquer natureza . Isso é problemático porque significa que, se você tentar executar ingenuamentebash -l
, não carregará o seu.bash_profile
etc. porqueHOME
não está definido. Para mitigar isso, passamos explicitamenteHOME="$HOME"
, criando um ambiente em queHOME
(e somenteHOME
) está definido.bash -l -c ...
: Executa o comando desejado em um shell de logon. Você precisará de um shell de login para isso, porque estamos começando em um ambiente limpo e precisamos recarregar tudo.Notavelmente:
sudo
versão exige ).su
versão exige ).ssh
versão exige ).fonte
Para algo ainda mais agressivo
env -i bash
, tente desabilitar tudo, incluindo $ HOME e $ TERM.fonte
man sudo
e encontrei: "se o usuário de destino for o mesmo que o usuário que está chamando, nenhuma senha será necessária." (su
Parece que sempre pede uma senha.) Eu sou tão idiota por ter esquecido algo tão simples no primeiro parágrafo de umaman
página :( Evitei o sudo em primeiro lugar porque presumi que sempre pedia uma senha. Obrigado novamente!$USER
, precisará fazer login como root e depoissudo -u ...
como usuário. Se você apenas fizersudo -u
como usuário, herdará.sudo
acesso. Existe um método alternativo que não requer sudo?su -l $USER
.ssh $USER@localhost <command>
está funcionando melhor