AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1385089
Accepted
cocomac
cocomac
Asked: 2022-01-04 14:14:36 +0800 CST2022-01-04 14:14:36 +0800 CST 2022-01-04 14:14:36 +0800 CST

Como faço para executar novamente o penúltimo comando?

  • 772

Estou usando o Ubuntu 21.10. Se eu errar, posso executar novamente o último comando com !!. Aqui está um exemplo:

$ apt update
Reading package lists... Done
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
$ sudo !!
sudo apt update
[sudo] password for [me]:
...
Fetched 336 kB in 2s (206 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
98 packages can be upgraded. Run 'apt list --upgradable' to see them.

Tudo bem, mas em vez de executar novamente o comando anterior, como posso executar o anterior? Assim:

$ echo hi
hi
$ echo hello
hello
$ !!   <-- I'm trying to get that to run 'echo hi'
hello

Basicamente, aqui está o que estou procurando

$ echo hi
hi
$ echo hello
hello
$ ???   <-- What can I put here to get it to run 'echo hi'?
echo hello!
hello!

Então, dado que !!executa o último comando, como posso executar o comando antes do anterior? No meu exemplo, em vez de digitar !!, o que posso executar para executar echo hi?

command-line
  • 4 4 respostas
  • 3494 Views

4 respostas

  • Voted
  1. Gordon Davisson
    2022-01-04T16:18:26+08:002022-01-04T16:18:26+08:00

    Você pode usar as teclas up-arrowe down-arrowpara percorrer seu histórico de comandos. Então, para executar novamente o penúltimo comando, você pressionaria up-arrowduas vezes e, em seguida, return.

    Isso tem várias vantagens sobre métodos como !-2. Mais importante (na minha opinião), você pode ver o comando e certificar-se de que é aquele que você pretendia executar novamente antes de pressionar o retorno para executá-lo. Mesmo além de erros simples ("oops, acho que era o terceiro comando de volta que eu queria"), o histórico do bash pode não contar os comandos anteriores da maneira que você espera por causa de opções como ignorespace, ignoredupse a HISTCONTROLvariável.

    Além disso, a recuperação interativa de comandos permite que você edite facilmente o comando antes de executá-lo novamente. Você também pode fazer isso com modificadores de recuperação de histórico, mas, novamente, fazê-lo interativamente permite que você veja suas edições antes de executar o comando recuperado/modificado.

    Além disso, se você é preguiçoso como eu, up-arrow up-arrow returné mais fácil digitar do que(shift)exclamation minus 2 return

    • 41
  2. Best Answer
    steeldriver
    2022-01-04T14:19:36+08:002022-01-04T14:19:36+08:00

    Da HISTORY EXPANSIONseção de man bash:

    !-n    Refer to the current command minus n
    

    Então, para executar o comando antes do último, você pode usar!-2

    Na verdade, !!é apenas um sinônimo de!-1

    • 36
  3. Olivier Dulac
    2022-01-05T02:47:57+08:002022-01-05T02:47:57+08:00

    !-nexecute o comando "-n" do seu histórico, mas eu não o recomendaria, pois é "instantâneo" e não lhe dará tempo de verificar primeiro se o comando "Nth" é o correto que você precisa executar novamente.. . ( @bac0n comentou muito bem que você pode definir : shopt -s histverifypara alternar para "não instantâneo": ele permitirá que você verifique se o comando !-n expande para, antes de executá-lo com <Enter>)

    No entanto, se você estiver usando bashcomo seu shell, prefiro recomendar o uso do recurso de pesquisa:

    Ctrl e digite something, que é a parte do comando que você está procurando. (ex: Ctrl+ r+ (digite no terminal) echo)

    Ele apresentará a última ocorrência em seu histórico de correspondência something(ou seja, correspondendo ao termo de pesquisa que você digitou após Ctrl+ r).

    Subsequente Ctrl+ rolhará mais para trás em seu histórico. Ou adicionar letras irá precisar a pesquisa.

    E quando encontrar uma boa correspondência, pressione Enterpara executá-la novamente (ou Ctrl+ cpara sair da pesquisa sem executar o comando correspondente exibido no momento).

    Dica adicional: se, em vez de Enter, você pressionar Ctrl+ o, ele executará o comando de histórico selecionado E apresentará o próximo, pronto para ser executado Enter(que executa apenas aquele e retorna ao prompt normal) ou Ctrl+ onovamente (que o executa e apresente o próximo comando em seu histórico). Muito útil para repetir uma sequência de passos e fornecer uma exibição desses comandos antes de executá-los.

    E cada vez que você usa essas coisas, você pode alterar algo na linha exibida no momento (usando a tecla de seta para a esquerda ou para a direita para se mover dentro dela), como um parâmetro, um nome de servidor etc., e executar essa linha modificada + vá para o próximo (se você pressionou Ctrl+ o).

    • 7
  4. Latkar
    2022-01-04T15:22:43+08:002022-01-04T15:22:43+08:00

    Se você correr

    history
    

    você obterá uma lista dos últimos 'n' comandos inseridos. O tamanho do histórico é padronizado para 500 comandos. Então, como explicado pelo steeldriver, o comando antes do último pode ser executado novamente com

    !-2
    

    e sim, o penúltimo será

    !-3
    

    e assim por diante. Para mais detalhes, use

    man history
    

    e procure por Designadores de Eventos .

    • 4

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve