Eu apenas segui o que você descreveu, acompanhado por alguns experimentos
~$ sudo -s
~# ls -l $HISTFILE
-rw------- 1 g g 44174 Jan 4 16:26 /home/g/.bash_history
~$ sudo -i
~# ls -l $HISTFILE
-rw------- 1 root root 2356 Jan 4 16:23 /root/.bash_history
~$ sudo ls -l $HISTFILE
-rw------- 1 g g 44174 Jan 4 16:26 /home/g/.bash_history
Então, quando estamos executando os comandos padrão sudo
ou quando usamos sudo -s
para obter um shell raiz, já estamos usando nosso próprio arquivo histórico.
Somente quando invocamos sudo -i
para obter um shell de login apropriado, o histórico de raiz original é usado.
Agora segui o seu exemplo e editei /root/.bashrc
para conter
HISTFILE="/root/.bash_history.$SUDO_USER"
como primeira linha.
As repetições acima das experiências com sudo -s
e sudo ls -l $HISTFILE
produziram os mesmos resultados de antes (como esperado). Mas sudo -i
me deu um shell sem histórico (e nenhum arquivo de histórico).
Depois de executar
~$ sudo -i
~# ls -l .bash_history*
-rw------- 1 root root 2412 Jan 4 17:16 .bash_history
~# echo $HISTFILE
/root/.bash_history.g
~# ls -l $HISTFILE
ls: cannot access '/root/.bash_history.g': No such file or directory
e desconectando-se
~$ sudo -i
~# ls -l .bash_history*
-rw------- 1 root root 2412 Jan 4 17:16 .bash_history
-rw------- 1 root root 52 Jan 4 17:25 .bash_history.g
Eu obtenho os resultados esperados (incluindo o acesso ao "meu" histórico usando as teclas de seta.
Lembre-se de que o conteúdo de /root/.bashrc
é apenas executado para um shell interativo de não-login (como sudo -s
), para um shell de login (como sudo -i
)/root/.bashrc
é somente originado e somente se /root/.profile
contiver algo como
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi