Às vezes, quando executo um comando, não percebo que precisava executá-lo como superusuário para ter permissão suficiente.
Existe uma maneira de executar o mesmo comando novamente, mas como um super usuário?
command-line
sudo
Trufa
fonte
fonte
!!
por conta própria executa o comando anterior, conforme salvo emhistory
. Além disso, fazer!-1
,!-2
e assim por diante executa seu último comando, o segundo último comando e assim por diante. Handy!!<command>
executará o último evento a partir~/.bash_history
desse início com<command>
!
coisa idiota da cópia copiadatcsh
me ferrou mais vezes do que nunca foi útil. Aspas duplas não protegem da interpretação de!
.$ foo "!bar"
->!bar: event not found
.O que outras pessoas estão dizendo
resposta : você entra
sudo !!
imediatamente depois para repetir o comando anterior com privilégios escalados.edit: Imagem encontrada via reddit , e é uma paródia da história em quadrinhos xkcd original de Randall Munroe.
fonte
Você pode tentar a tecla de seta para cima para percorrer seus comandos antigos e reescrevê-los / alterá-los e adicionar o que está
sudo
na frente deles. (o botão inicial acima das teclas de seta definirá a posição para o início.)Não gosto da
sudo !!
ideia, porque às vezes você adiciona outro comando no meio e não se lembra mais.fonte
sudo !!
, o shell se expandirá!!
para que você possa ver qual comando está tentando executar. Portanto, pode ser irritante pressionar Ctrl-C e encontrar o comando certo, mas pelo menos não o levará de surpresa.!!
sudo !!<TAB>
e ele é preenchido automaticamente!!
para mim. O Bash pode expandir o histórico comM-^
(para mim, alt + shift + 6), mas isso é menos fluente (você pode refazer isso). Também existeshopt -s histverify
, o que faz com que, quando você usa a expansão do histórico e pressiona enter, ele fornece outra linha de prompt com a expansão executada para permitir que você a veja / edite.shopt -s histverify
não vai ajudar nem um pouco. A maioria das pessoas se acostuma a baterEnter
duas vezes. Nesse momento, ainda é tarde para verificar o que aconteceu.Vou apenas adicionar uma alternativa: tão curta quanto digitar
sudo !!
e mais flexível:É exatamente o mesmo número de pressionamentos de tecla (conto "ctrl + A" como um ...), mas adicionando "seta para cima", você pode fazer isso conforme o comando que estiver no seu histórico.
fonte
set -o vi
). Então você pode Escapar (vá para o modo de comando) e, em seguida, 'I' (maiúscula 'i', insira no início da linha).Há algumas maneiras de fazer isto
Basta digitar o comando novamente, adicionando
sudo
antes do comandoPressione Up arrowpara obter o último comando e colocar
sudo
na frente dele.Entrar
sudo !!
O
!!
expande para o último comando inserido. Você pode fazer coisas semelhantes com outras coisas com o histórico da linha de comando, veja aquifonte
Esta questão poderia ter sido generalizada em " Executar o mesmo comando, mas com algumas modificações ", uma vez que uma das brilhantes decisões de design no Unix é que o que é implementado uma vez no shell pode ser aproveitado por qualquer comando invocado no shell.
Em outras palavras, esse truque não se aplica apenas a
sudo
:sudo !!
)time !!
)env A=b B=z !!
)!!
)A expansão do histórico (também conhecida como substituição do histórico) é apenas um recurso do shell para facilitar a repetição de comandos anteriores (com menos pressionamentos de tecla). Verifique sua página de manual do shell para
history expansion
. Ele descreve muitos outros truques e atalhos que você pode fazer com o histórico, por exemplo:Você pode consultar os comandos anteriores por número:
Você pode consultar palavras individuais em comandos anteriores:
Você também pode pesquisar antes de repetir:
Você pode pesquisar o histórico e substituir algo por outro:
E muito mais, já que você pode combinar a seleção de comandos, a seleção de argumentos, pesquisar e substituir independentemente.
A página de manual do seu shell (neste caso
man bash
) é sua amiga.fonte
Eu uso o zsh em vez do bash e tenho isso no meu
~/.zshrc
, então, pressionando Alt+ Sinseresudo
no início da linha de comando:Infelizmente, não consegui encontrar uma maneira de fazer a mesma coisa no bash.
fonte
~/.inputrc
"\es":"\C-asudo "
e você passará para o início de uma linha longa e o sudo será inserido no início da linha ao pressionaralt-s
. Reinicie o terminal ou leia novamente~/.inputrc
para que ele funcione.Se você quiser fazer isso em um alias, precisará usar
alias redo='sudo $(history -p !!)'
por algum motivo.fonte
Se você não tem permissão para fazer root com o sudo, o programa sudo não foi instalado no sistema.
fonte
Do jeito que eu prefiro:
Mas pode ser mais fácil fazer "sudo !!", depende de você.
fonte