Adicionando strings à stdin de um comando

Postado em 07/09/2025

Estava assistindo os excelente vídeos de bash do prof. Júlio Neves em seu canal no YouTube quando me surgiu uma dúvida: como adicionar uma string à saída (stdout) de um comando que servirá como entrada (stdin) para ou outro comando?

Imagine por exemplo que queira calcular o valor da divisão sucessiva do número um até o dez em intervalos de dois. Utilizando o comando seq(1), podemos listar estes números.

$ seq 1 2 10
1
3
5
7
9

Podemos então serializar esta saída trocando o separador do padrão newline pelo operador de divisão (/). Note que "escapamos" a barra utilizando a contrabarra. Poderíamos ter colocado a barra entre aspas ou parênteses sem nenhum problema.

$ seq -s\/ 1 2 10
1/3/5/7/9

Agora, utilizando um pipe, podemos redirecionar a saída do comando seq(1) para a entrada do bc(1), a calculadora padrão do UNIX. O resultado, porém, não é o esperado.

$ seq -s\/ 1 2 10 | bc
0

O bc nos retornou zero e o problema não é a falta de precisão da calculadora, mas sim a falta do argumento scale para nos indicar a quantidade de dígitos após o ponto decimal. Se é só isso então, como podemos fazer para adicionar este argumento ao nosso comando?

Existem diversas maneiras de fazer isso, porém eu decidi utilizar o comando cat(1) da seguinte forma:

$ seq -s\/ 1 2 10 | cat <(echo -n "scale=8;") - | bc
.00105820

A construção em <(echo -n "scale=8;") é chamada de process substitution e cria um arquivo temporário a partir da saída de um comando (no caso o echo(1)).

O comando cat(1) enxerga esta construção como um arquivo e a concatena com a entrada padrão (stdin) representada pelo hífen.

Dessa forma, o comando bc(1) recebe a cadeia de caracteres "scale=8;1/3/5/7/9" e faz o cálculo com uma precisão de oito dígitos.

Conclusão

O Bash é realmente uma ferramenta muito poderosa, frequentemente dispensando a construção de programas novos. Recomendo fortemente as aulas do prof. Júlio Neves no YouTube. Ele realmente fala como alguém que tem experiência de décadas no assunto e dá dicas valiosíssimas.

Referências

  1. Canal YouTube Prof.Júlio Neves
  2. Site Prof.Júlio Neves