É 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;
}
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?
É 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;
}
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
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
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.
Tags bash