Terminal: Repetindo o último argumento do comando anterior, usando o bang-dollar

O !$ ou bang-dollar é um daqueles atalhos que ajudam a economizar quilômetros de digitação.

A sintaxe comum a boa parte dos comandos que são executados no Terminal faz com que seja frequente encontrar situações em que o último argumento do comando anterior seja repetido no próximo comando, como nos exemplos a seguir:

ls -l sistema-3.8.2-pre
tar zcvf sistema-3.8.2-pre.tar.gz sistema-3.8.2-pre
mkdir projeto
cd projeto
cp example.conf wordpress.conf
nano -w wordpress.conf
ping -c1 servidor.com.br
ssh fulano@servidor.com.br

Trata-se de uma situação tão comum, que mereceu inúmeros atalhos e formas alternativas de ter de evitar a redigitação. Para quem já aprendeu, na semana passada, a usar o bang bang (!! ou dupla exclamação) para repetir um comando inteiro como argumento do próximo, provavelmente a alternativa mais simples de memorizar será o !$ (que, pela tradição tipográfica dos EUA, recebe o título de bang dollar).

O funcionamento do bang dollar é fácil de entender, pois simplesmente executa o novo comando substituindo o !$ pelo último parâmetro do comando anterior (mostrando antes, numa linha à parte, como ficou o comando após a substituição). Repetindo os exemplos acima:

ls -l sistema-3.8.2-pre
tar zcvf !$.tar.gz !$
mkdir projeto
cd !$
cp example.conf wordpress.conf
nano -w !$
ping -c1 servidor.com.br
ssh fulano@!$

Se você quiser ver o resultado da substituição antes de confirmar o novo comando, pressione ESC Control+E (ou seja, primeiro a tecla ESC separadamente, depois Control e E ao mesmo tempo).

Uma alternativa um pouco diferente no mecanismo, mas que nos casos comuns tem o mesmo efeito (exceto pela ausência de impressão do comando expandido antes de executá-lo), é usar a variável no lugar da expansão !$.

Ao invés de inserir uma expansão ou variável, você também pode inserir na posição do cursor o último parâmetro do comando anterior usando um atalho de teclado. O ESC. (ou seja, a tecla ESC seguida de um ponto) é um deles, e funciona na configuração default do Mac.

E já que você está memorizando expansões baseadas no ponto de exclamação, aqui vão mais duas:

  • !* expande para o conjunto completo de parâmetros do comando anterior
  • !:n (onde n é um número) expande para o n-ésimo parâmetro do comando anterior. Por exemplo, !:3 é o terceiro parâmetro, !:5 é o quinto parâmetro, e assim por diante

Estes são apenas exemplos simples da expansão de parâmetros do shell Bash (default do Terminal do OS X) e de outros que adotam as mesmas convenções, mas também estão entre os mais úteis no dia-a-dia, e podem poupar bastante digitação. Aproveite!

(PS: Certamente voltaremos ao assunto dos atalhos do Terminal, mas se você quiser ir se adiantando, a documentação do Bash tem bastante informação interessante e atualizada sobre maneiras de economizar tempo e digitação ツ)

Comentar

Comentários arquivados

Mais acessados:

Artigos recentes: