What is the difference between "sudo -i" and "sudo bash -l"
There is a recent question regarding multiple sysadmins working as root, and sudo bash -l
was referenced.
I searched for this on google and SE, but I don't understand the difference between sudo bash -l
and sudo -i
.
From the man pages for bash and sudo it seems that the difference may be that sudo bash -l
runs ~/.bash_profile, ~/.bash_login, and ~/.profile, and ~/.bash_logout of the root user, but from testing myself it looks like it runs the normal user's .bashrc and not the root one. I may have misunderstood which user the ~ expression is referencing in the man pages.
Clarification of the difference and usage scenarios would be appreciated.
Solution 1:
They differ in that if the root user login shell specified in /etc/passwd is not bash, then the second command will get you a bash shell as root while the first command will use whatever the interactive shell the root user has.
Solution 2:
Also to add to @johnshen64 answer I noticed that the sudo -i
invocation updates the $USERNAME
env variable to root
and cd ~
to the user home like so;
$ 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
However for sudo bash -l
$USERNAME
is unmolested, and the working directory is not changed. (though this is not consistent across other users, see comments...)
$ 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
So presumably you are not getting exactly the same set of ~/.bashrc
, or not in the same order etc.
(my box might have been messed up a little by my .bashrc
tinkerings, so YMMV)