Il y a quelques références différentes à la «contribution» ici, donc je vais donner quelques scénarios en le comprenant d'abord. Pour votre réponse rapide à la question sous la forme la plus courte :
stat testfile < <($1)> outputfile
Ce qui précède effectuera une statistique sur le fichier de test, prendra (redirigera) son STDOUT et l'inclura dans la fonction spéciale suivante (la partie <()), puis affichera les résultats finaux de tout ce qui était, dans un nouveau fichier (fichier de sortie). Le fichier est appelé, puis référencé avec les fonctions intégrées bash (1 $ à chaque fois, jusqu'à ce que vous commenciez un nouvel ensemble d'instructions).
Votre question est excellente, et il existe plusieurs réponses et façons de le faire, mais elle change en effet avec ce que vous faites spécifiquement.
Par exemple, vous pouvez également boucler cela, ce qui est assez pratique. Un usage courant de ceci est, dans l'esprit de pseudo-code, est:
run program < <($output_from_program)> my_own.log
Prendre cela et développer ces connaissances vous permet de créer des choses telles que:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
Cela exécutera un simple ls -A sur votre répertoire actuel, puis indiquera pendant que vous parcourrez chaque résultat du ls -A vers (et voici où c'est délicat!) Grep "thatword" dans chacun de ces résultats, et exécutez uniquement le précédent printf (en rouge) s'il a effectivement trouvé un fichier contenant "ce mot". Il enregistrera également les résultats de la grep dans un nouveau fichier texte, files_that_matched_thatword.
Exemple de sortie:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
index.html
Tout cela a simplement imprimé le résultat ls -A, rien de spécial. Ajoutez-y quelque chose à grep cette fois:
echo "thatword" >> newfile
Maintenant, relancez-le:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
files_that_matched_thatword index.html newfile
Found a file: newfile:thatword
Bien que la réponse soit peut-être plus épuisante que ce que vous recherchez actuellement, je pense que conserver des notes pratiques comme celle-ci vous sera beaucoup plus utile dans les efforts futurs.
<
(entrée du fichier vers le côté gauche) ou|
(entrée du flux vers le côté droit). Il y a une différence.