Ecoando a saída canalizada [duplicada]

0

Existe uma maneira de ecoar a saída que está sendo canalizada para o próximo comando? Por exemplo, vamos dizer que posso ler nomes de arquivos a partir de um arquivo de texto e, em seguida, executar um comando nesse arquivo:

cat files.txt | xargs -I{} -d"\n" command 

O comando é executado e a saída é exibida no terminal, existe uma maneira de imprimir o nome do arquivo também?

Digamos que o arquivo de entrada contenha:

file1.txt
file2.txt

Resultado pretendido:

file1.txt
[output of command with file1.txt as input]
file2.txt
[output of command with file2.txt as input]

Existe uma maneira de obter também file1.txt e file2.txt no stdout?

    
por user3146687 27.04.2016 / 05:52

4 respostas

0

É melhor escrever a função:

Function()
{
cat file1.txt | xargs -I{} -d"\n" command >> /dev/console;
cat file2.txt | xargs -I{} -d"\n" command >>/dev/console;
}
    
por 27.04.2016 / 06:10
0

Usar cat é mais trabalhoso se você tiver um subprocesso. Usar um loop while seria mais rápido, eu acho

while read filename
do
# do something with $filename
done<file_to_be_processed
    
por 27.04.2016 / 06:12
0

Para obter o nome do arquivo que você deseja usar echo para obter o conteúdo, use cat . Se você quiser se manter flexível (e, por exemplo, trocar seu comando cat files.txt por find .... , permaneça com sua invocação de xargs , mas faça isso apenas no momento:

 cat files.txt | xargs -L 1 /path/to/your_script

com your_script :

#!/bin/bash
echo $1
cat $1
    
por 27.04.2016 / 07:40
0

Comando shell tee faz exatamente o que você está pedindo (ecoa a saída que está sendo canalizada para o próximo comando). Apenas canalize para tee ( some_command | tee ). Pesquise páginas do manual para obter o uso exato, exemplos e outros detalhes.

    
por 27.04.2016 / 08:13

Tags