Eles diferem se o shell de login do usuário root especificado em / etc / passwd não for bash, então o segundo comando obterá um shell bash como root enquanto o primeiro comando usará qualquer shell interativo que o usuário root tenha.
Há uma pergunta recente em relação a vários sysadmins que trabalham como root e sudo bash -l
foi referenciado.
Eu procurei por isso no google e no SE, mas não entendi a diferença entre sudo bash -l
e sudo -i
.
A partir das páginas man do bash e sudo, parece que a diferença pode ser que sudo bash -l
executa ~ / .bash_profile, ~ / .bash_login e ~ / .profile, e ~ / .bash_logout do usuário root, mas de testar a mim mesmo, parece que ele roda o .bashrc do usuário normal e não o raiz. Eu posso ter entendido mal qual usuário a expressão ~ está referenciando nas páginas man.
A clarificação dos cenários de diferença e uso seria apreciada.
Além disso, para adicionar à resposta @ johnshen64, notei que a invocação sudo -i
atualiza a variável $USERNAME
env para root
e cd ~
para a casa do usuário assim;
$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root
No entanto, para sudo bash -l
$USERNAME
não é molestado e o diretório de trabalho não é alterado. (embora isso não seja consistente entre os outros usuários, veja os comentários ...)
$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX
Então presumivelmente você não está recebendo exatamente o mesmo conjunto de ~/.bashrc
, ou não na mesma ordem, etc.
(minha caixa pode ter ficado um pouco confusa com minhas .bashrc
tinkerings, então YMMV)