3 Truques de Terminal que Você Gostaria de saber Antes

Não importa se você está aprendendo a usar o terminal ou se já é um profissional experiente, sempre há muitos truques que podem economizar seu tempo.

Separamos três truques úteis do Bash para você adicionar ao seu repertório.

Substituição de Processos: Transformando Dados em Arquivos Temporários

Você provavelmente já se deparou com uma situação em que precisava de um caminho para um arquivo como argumento, mas tudo o que tinha era dado.

Por exemplo, vamos supor que você queira editar um texto que já está no terminal:

echo "foo" | nano

Esse comando não funciona, pois você não pode enviar dados diretamente para o nano; em vez disso, é necessário fornecer um caminho para um arquivo, como nano /caminho/para/arquivo.txt.

Para resolver esse problema, você provavelmente usará uma sequência de comandos parecida com a seguinte:

echo foo > bar.txt
nano bar.txt

Nesse exemplo, são utilizados dois comandos separados: primeiro, cria-se um arquivo e, em seguida, o utiliza-se.

Essa abordagem é subótima, pois deixa arquivos espalhados pelo sistema e você também precisa digitar o caminho. A substituição de processos resolve esse problema:

echo <(true)

Isso gera um caminho temporário, por exemplo: /dev/fd/16.

A substituição de processos cria, a partir da saída de um comando, um arquivo temporário que outro comando pode ler. No exemplo acima, “<(true)” gera um caminho e o comando echo o recebe. O dado disponível é simplesmente a palavra “true”.

A parte “fd” do caminho refere-se a “descritor de arquivo”, que é um identificador utilizado por programas para referenciar arquivos abertos internamente. Cada processo possui seus próprios descritores, e neste caso o echo os utiliza.

Veja um exemplo prático com substituição de processos:

nano <(echo "foo")

Esse comando é equivalente a digitar:

echo "foo" > /tmp/foo
nano /tmp/foo

Você não conseguirá salvar e editar o texto ao executar nano <(echo “foo”) porque o arquivo criado é somente leitura, mas é possível alterar o local de salvamento utilizando o atalho Ctrl+O.

Substituição de Processos de Entrada/Saída

A expressão <(comando) cria uma substituição de processos de entrada. Alternativamente, você também pode criar uma substituição de processos de saída:

echo "foo" > >(cat)

Esse comando equivale a:

echo "foo" > /tmp/foo
cat /tmp/foo

Resumindo:

  • echo <(true) é uma substituição de processo de entrada, onde o comando echo recebe os dados através de um caminho especial (neste caso, o dado é apenas “true”).
  • echo “foo” > >(cat) é uma substituição de processo de saída, onde o cat recebe a palavra “foo” através de um caminho especial. Lembre que o primeiro caractere “>” é o operador de redirecionamento, e o segundo faz parte da expressão de substituição.

Para encerrar essa seção, um exemplo prático para juntar tudo:

diff <(ls -1 ~) <(ls -1 /tmp)

Esse comando compara as diferenças entre duas pastas. Nesse caso, a substituição de processo de entrada é útil, pois o diff espera receber caminhos para arquivos, e é exatamente isso que a substituição de processos fornece.

Observação: a flag ls -1 é o número um, e não a letra “l”.

Expansão do Histórico: Repetindo Comandos

Os próximos três exemplos utilizam expansão do histórico. Essas expressões transformam entradas simples de caracteres em itens do histórico do seu shell.

Duplo Sinal de Exclamação!

Esse é um dos comandos que mais utilizo, logo após cd e ls. É simples de usar e entender, e simplesmente reexecuta o último comando que você executou.

ls
!!

Você pode notar, pela saída do comando, que o ls foi executado duas vezes.

Expandindo um Item Específico do Histórico

Primeiro, consulte seu histórico para encontrar o comando desejado:

history

Depois, escolha um dos números à esquerda e insira-o como !N:

!N

O interessante dessa expansão com números é que eles permanecem consistentes, permitindo que você se familiarize com eles. Essa familiaridade, no entanto, só dura enquanto o arquivo ~/.bash_history não for excluído.

Expandindo pela Primeira Parte do Comando

Procurar entre o histórico e localizar um comando específico pode se tornar tedioso. Uma abordagem alternativa e mais eficiente é que o Bash permite que você digite parcialmente o começo de um comando, e ele executa a correspondência mais recente.

echo foo
!e
!ech

Isso é ideal para alternar entre diversos comandos durante uma sessão única no terminal. Para comandos mais antigos, pode ser útil utilizar alguma ferramenta de busca por histórico mais avançada.

Grupos de Comandos

Em algumas situações, você pode querer executar uma série de comandos como se fossem um grupo único, tratando sua saída como um único resultado. Considere o seguinte exemplo:

echo foo > /tmp/foo.txt
echo bar >> /tmp/foo.txt

O comando acima cria um arquivo com o seguinte conteúdo:

foo
bar

Quando os comandos se tornam mais complexos, essa abordagem pode ficar confusa devido às linhas desnecessárias. A alternativa mais simples é usar um grupo de comandos.

Um grupo de comandos reúne todas as saídas dos comandos em um só fluxo, tornando o processamento do resultado mais direto.

{ echo foo; echo bar; } > /tmp/foo.txt

Isso resulta no mesmo conteúdo do exemplo anterior. Note que o redirecionamento é feito apenas uma vez, dispensando o uso do operador de anexação (>>).

É importante colocar um ponto-e-vírgula após cada comando, inclusive o final, e manter espaços entre as chaves e os comandos.

Para comprovar que os comandos externos ao grupo são executados apenas uma vez, experimente o seguinte:

{ echo "A"; echo "B"; } | wc -l

Um exemplo prático do uso real:

{ ping -c 1 example.com; ping -c 1 example.net; } > /tmp/ping.txt

Em resumo:

  • A substituição de processos transforma a saída de um comando em um caminho temporário. Por exemplo, nano <(echo “foo”) e echo “foo” > >(cat).
  • As expansões do histórico do shell permitem referenciar comandos anteriores facilmente, seja usando !foo, !N ou !!.
  • Um grupo de comandos une as saídas de diversos comandos em um único resultado, como em { echo “foo”; echo “bar”; } > /tmp/foo.txt.

O que foi abordado aqui é apenas a superfície do que o Bash pode oferecer.

Conteúdo por How to Geek.

Relacionados

Escrito por

Rafa Digital

Rafa Digital

Apaixonado por tecnologia e pelo mundo digital, Rafa Digital vive conectado. Aqui no Espaço Diverso, ele transforma assuntos complexos em dicas práticas sobre redes sociais, aplicativos e ferramentas digitais, ajudando o leitor a aproveitar o melhor da tecnologia de forma fácil e descomplicada. Quando não está testando um novo recurso do WhatsApp, provavelmente está explorando as novidades do Instagram ou descobrindo as melhores formas de deixar seu dia mais digital.