Freqüentemente no Terminal (embora eu espere que qualquer resposta funcione no bash e na maioria dos outros), digito algum comando e recebo algum tipo de erro de permissão devido à falta de sudo
.
Ok, então pressione 'para cima', segure/martele 'esquerda', digite sudo
e pressione 'enter'.
É irritante. Mais ainda, quanto mais longo era o comando.
Observe que faltar sudo
é o pior caso; um erro de digitação mais próximo do início do que do fim é igualmente irritante.
O que eu gostaria é de uma maneira de executar uma espécie de pressionamento de tecla 'para cima e para casa'. Na verdade, talvez esses dois toques resolvam - mas o teclado do meu Macbook não tem Home, então não posso tentar.
Pontos de bônus por uma maneira de inserir sudo
e pressionar 'enter' automaticamente também, digamos, por CMD + Shift + S.
Isso pode ser feito ou estou sonhando?
Responder1
Basta usar UPe CTRL-A.
Ambos !sudo
funcionam sudo !!
facilmente. Com uma diferença:
sudo !!
irá executar o último comando retirado do históricosudo
no início.!sudo
executará o último comando do histórico que começou comsudo
.Geralmente CTRL-Atraz você no início da linha em um terminal Linux e CTRL-Eaté o final.
Se quiser, você pode continuar usando sua estratégia. Você só precisa descobrir o atalho do seu sistema. Você pode encontrar uma lista deatalhosem ambiente gráfico e de textopor exemplo, aqui.
Apenas umaviso: sudo !!
e !sudo
funciona muito rápido evocê não tem controle visual da linha que está executando como superusuário. Isto pode resultarprejudicialàs vezes. Especialmente se você tiver um erro de impressão.
Vamos fazer um exemplo dramático:
cd $HOME/Directory_To_Delete # You go to delete what is inside a directory
rm -rf . ; cd .. # You do it and go up of one
apt-get update # Note the space in the beginning of the line
sudo !! # Gone!! Now you realize you never really wanted
Tarde demais, você acabou de apagar seu diretório inicial e todas as subpastas !!.
Quando você escreve um comando com um espaço como primeiro caractere é possível que ele não termine no histórico. Isto depende do valor da variável $HISTCONTROL. Se a lista de seus valores incluirignorar espaço(ouignore ambos) as linhas que começam com um caractere de espaço não são salvas na lista do histórico. Então, com sudo !! você executará o último comando anterior.
Você pode imaginar uma situação semelhante com !sudo
, ele executará o último comando começando com sudo
registrado no histórico, mas se o último que você lembra estava começando com um espaço... agora você sabe que usará outro.
Última nota: menos é dramático o seu erro mais pode ser tortuoso porque pode passar sem que você perceba... e você correrá o risco de ser chamado a pagar todos os juros de uma conta da qual não consegue se lembrar.
Atualização (Bash é ótimo):
com versões recentes do Bash é possível corrigir esse comportamento perigoso com o seguinte comando que sugiro colocar no ~/.bashrc
arquivo:
shopt -s histverify
De man bash
você pode ler
Se overificação históricaopção shell está habilitada eLeia a linhaestá sendo usado,as substituições do histórico não são passadas imediatamente para o analisador de shell.Em vez disso, a linha expandida é recarregada no buffer de edição readline para modificações adicionais.
Assim você pode ler e modificar quando necessário o comando que irá executar.
Como não é a configuração padrão em muitas distribuiçõesainda precisamos nos lembrar disso quando usarmos outras contas.
Responder2
Aqui estão algumas combinações de teclado comuns que muitos programas Mac e Linux usam (embora não tenhamos certeza de quais são seguidas pela maioria dos aplicativos do Windows):
- CTRL-A- Mova o cursor para o início da linha atual
- CTRL-E- Leve o cursor até o final da linha atual
- CTRL-Left- Mova o cursor uma palavra para trás
- CTRL-Right- Mova o cursor para frente uma palavra
Responder3
Usar
sudo !!
O !!
será substituído pelo comando anterior completo.
Responder4
@WChargin está correto em relação a !sudo
, então estou mudando minha resposta ...
sudo !!
é a resposta correta, como muitos disseram.
Por precaução, estou colando aqui o seguinte, em relação ao history
comando e como esse !
comando funciona. Eu espero que isso ajude.
O comando histórico
O comando history pode ser usado para listar o log dos comandos que você digitou no Bash:
Este registro é chamado de “histórico”. Para acessá-lo digite:
history n
Isso listará apenas os últimos n comandos. Digite “histórico” (sem opções) para ver toda a lista do histórico.
Você também pode digitar
!n
para executar o comando número n. Usar!!
para executar o último comando que você digitou.
!-n
irá executar o comando n vezes antes (em outras palavras!-1
é equivalente a!!
).
!string
irá executar o último comando começando com aquela “string” e!?string?
irá executar o último comando contendo a palavra “string”. Por exemplo:
!cd
irá executar novamente o comando que você digitou pela última vez, começando com “cd”.
commandName !*
executará o “commandName” com quaisquer argumentos que você usou em seu último comando. Isto pode ser útil se você cometer um erro ortográfico, por exemplo. Se você digitou:emasc /home/fred/mywork.java /tmp/testme.java
Na tentativa de executar o emacs nos dois arquivos acima, isso obviamente falhará. Então o que você pode fazer é digitar:
emacs !*
Isso executará o emacs com os argumentos que você digitou pela última vez na linha de comando. Em outras palavras, isso equivale a digitar:
emacs /home/fred/mywork.java /tmp/testme.java