Para ficar claro com todas as outras respostas, !!
faz parte do mecanismo de histórico do shell. Eu acho que o problema não é com o sudo, mas com o shell, ou mais especificamente com o shell quando você é root.
Já faz muito tempo desde que eu toquei com qualquer um dos BSDs, mas eles tendem a ser mais UNIXes 'tradicionais', significando que eles ainda usam um shell Bourne real (leia-se: não como caracterizado como bash) como shell do root. 'Real' Bourne shell, neste caso, não significa nenhum mecanismo de histórico. Isso é por razões de recuperação do sistema. (*)
Ao efetuar login no root, você pode executar um shell com histórico, faça exec /bin/bash
ou exec /bin/tcsh
como desejar.
O truque antigo costumava ser ter uma conta root equiv, geralmente chamada de 'toor' que tinha um shell de login tcsh ou bash, o mesmo diretório inicial e o uid 0. Você não poderia usar o sudo para root.sudo toor
e, em seguida, estar em bash. Eu não tenho certeza do que é a nova gostosura, talvez
(*) O motivo, o shell do root é / sbin / sh e estaticamente vinculado. Significa que tem o número mínimo de dependências. Se o seu shell é / bin / bash e tem dependências de biblioteca em / usr, e agora / usr é gorked, você não tem shell. Se o seu shell é / sbin / sh, então se pelo menos o / sbin for montável, você pode fazer algum trabalho.