J'ai un script bash script qui appelle plusieurs processus de longue durée. Je veux capturer la sortie de ces appels dans des variables pour des raisons de traitement. Cependant, comme il s'agit de processus de longue durée, j'aimerais que la sortie des appels rsync soit affichée dans la console en format en temps réel et non après coup.
À cette fin, j'ai trouvé une façon de le faire, mais elle repose sur la sortie du texte sur /dev/stderr. J'ai le sentiment que la sortie vers /dev/stderr n'est pas une bonne façon de faire.
VAR1=$(for i in {1..5}; do sleep 1; echo $i; done | tee /dev/stderr)
VAR2=$(rsync -r -t --out-format='%n%L' --delete -s /path/source1/ /path/target1 | tee /dev/stderr)
VAR3=$(rsync -r -t --out-format='%n%L' --delete -s /path/source2/ /path/target2 | tee /dev/stderr)
Dans l'exemple ci-dessus, j'appelle rsync plusieurs fois et je veux voir les noms des fichiers au fur et à mesure qu'ils sont traités, mais à la fin, je veux toujours que la sortie soit dans une variable parce que je l'analyserai plus tard.
Existe-t-il un moyen plus "propre" d'y parvenir ?
Si cela fait une différence, j'utilise Ubuntu 12.04, bash 4.2.24.