Alguma mágica do bash para fazer referência ao parâmetro digitado anteriormente?

Alguma mágica do bash para fazer referência ao parâmetro digitado anteriormente?

Esta questão é uma variante de umaperguntado anteriormente Como repetir o parâmetro atualmente digitado no console bash?


Muitas vezes, sinto vontade de renomear um pouco o nome de um arquivo no shell, por exemplo:

$ mv test_1.py _test_1.py

ou

$ mv test_1.py test_1.py.org

Eu poderia usar as sugestões emComo repetir o parâmetro atualmente digitado no console bash?, mas

existe algummagia de festaisso me permitirá apenas fazer referência ao parâmetro digitado anteriormente?

por exemplo, se a mágica for $M,então - para o acima - eu usaria:

$ mv test_1.py _$M.py
$ mv test_1.py $M.org

Responder1

A magia funciona em duas partes.

Primeiro, echo tem o alias de e (echo também funcionará se você não quiser nenhum alias); segundo, usamos "expansão de chaves":

$ e mv {,_}test_1.py              # Try to see if it works as expected.
mv test_1.py _test_1.py

          # If the arguments are what you want:

$ mv {,_}test_1.py                # Press ↑ (up arrow), remove `e`

$ !*                              # OR: Type `!*` --> last line after arg 0.
$ mv {,_}test_1.py                # If `histverify` is set.

O !* pode ser expandido com um espaço se vocêativar o espaço mágicoou se vocêdefinirshopt -s histverifydepois de pressionar enter, você terá a chance de revisar o efeito da expansão do histórico antes de pressionar enter (novamente) para executar.

O outro exemplo:

$ e mv test_1.py{,.org}
mv test_1.py test_1.py.org        # The result of the brace expansion.
                                  # Review it, and if it is ok:
$ !*                              # type !* (use either space or enter)
                                  # That will depend on how you setup it.

$ mv test_1.py{,.org}        # The command appear again (enter to execute).
$

Há também a expansão do histórico !#que significa a linha de comando digitada até o momento e a seleção do primeiro comando :1. Se você tiver o espaço mágico ativado, digite mv test1.py !#:1e pressione espaço, o comando mudará:

$ mv test_1.py !#:1                # Press space.
$ mv test_1.py test_1.py           # The command line change to this.
$ mv test_1.py test_1.org          # Edit and press enter to execute.

informação relacionada