Eu tenho um comando que produz alguma parte de saída, que é na verdade um nome de arquivo contendo os dados de saída completos. Eu quero extrair o nome do arquivo (o que eu trivialmente faço com cut
) e, em seguida, passá-lo para outro programa como cat
, que exibirá o conteúdo desse arquivo.
Não consigo compartilhar o comando real em execução, mas, para fins de reprodutibilidade, é possível substituir ./my-command args
por echo 1:2:3:4:file.txt
Então eu tentei o seguinte:
./my-command args | cut -d : -f 5 | cat
Entretanto, isso apenas imprime o nome do arquivo, pois cat
simplesmente copia o conteúdo de stdin (que contém meu nome de arquivo) para stdout quando é invocado sem nenhum argumento.
Agora eu sei que eu posso contornar isso é Bash invertendo o fluxo de comandos e essencialmente passando cat
o argumento via sub-shell, por exemplo
cat './my-command args | cut -d : -f 5'
E isso irá imprimir o conteúdo do arquivo, no entanto, isso não é particularmente amigável, pois não posso simplesmente canalizar a saída do meu comando subjacente, acrescentando um comando simples à minha invocação.
Existe um programa cat
like que irá receber nomes de arquivos em stdin e imprimir seu conteúdo? Ou existe uma maneira de obter cat
para tratar stdin como argumentos?
Notas
Eu percebo que eu poderia definir uma função bash que leria nomes de arquivos de stdin e invocaria cat
neles em meu próprio ambiente. No entanto, esta técnica para descarregar os dados de saída diretamente precisa ser incluída na documentação do usuário final e uma abordagem agnóstica simples de shell é altamente preferível.