Existe um atalho para repetir o segundo comando próximo no bash?

7

Nós todos sabemos que !! pode repetir o último comando que você faz no bash.

Mas às vezes precisamos fazer alguma operação como

$ python test.py
$ vim test.py

$ python test.py # here is where I need to repeat the second proximate bash command

Eu posso usar a tecla de seta para cima para fazer isso, mas isso requer que eu mova minha mão direita para uma posição desconfortável. Então, eu estou querendo saber se existe um comando que como !! funcionaria?

    
por Zen 20.08.2014 / 10:29

2 respostas

4

Você pode usar !-2 :

$ echo foo
foo
$ echo bar
bar
$ !-2
echo foo
foo

Isso pode não ajudar com sua situação da mão direita.

Você também pode usar o !string histórico que está pesquisando esse tipo de caso:

$ python test.py
$ vim test.py
$ !py
python test.py # Printed, then run

Isso pode ser mais conveniente de usar. Ele será executado:

the most recent command preceding the current position in the history list starting with string.

Mesmo apenas !p funcionaria. Você pode usar !?string para pesquisar toda a linha de comando, em vez de apenas iniciar.

    
por 20.08.2014 / 10:36
4
!-2

Mais diversão está disponível. Digamos que você queira continuar operando em um arquivo (como acima, onde você está usando test.py, repetidamente):

cp foo.py thing.py
edit $_
python $_
!-2
^thing^foo
  • Copie um arquivo existente para thing.py
  • Edite (vim, emacs - mas por que você estaria usando uma linha de comando se estivesse executando o Emacs-OS, não tenho ideia) thing.py - a última palavra na linha de comando anterior
  • python thing.py
  • Editar thing.py
  • Editar foo.py

A manipulação da história é tão divertida. Tente man history . Note que a quest para reutilizar o histórico pode resultar em muito mais do que o comando em si. A substituição final do comando, onde eu substituo o thing.py pelo foo.py, é um desses exemplos. Menos caracteres para apenas digitar o comando e o nome. :)

A substituição do histórico também é o motivo pelo qual você recebe mensagens estranhas ao tentar:

$ echo "This is a disaster!"
-bash: !": event not found

O ponto de exclamação está sendo consumido como uma referência de histórico e não é possível encontrar um comando anterior com aspas duplas.

    
por 20.08.2014 / 11:24