Capture stdout à une variable, mais toujours l'afficher dans la console

J'ai un script bash qui appelle plusieurs processus long. Je veux capturer la sortie de ces appels dans des variables pour le traitement de raisons. Cependant, parce que ce sont de longs processus en cours d'exécution, je voudrais la sortie de la rsync appels à afficher dans la console dans en temps réel et pas après le fait.

À cette fin, j'ai trouvé un moyen de le faire, mais il s'appuie sur la sortie du texte à /dev/stderr. J'ai l'impression que la sortie vers /dev/stderr n'est pas une bonne façon de faire les choses.

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, je suis d'appel rsync un peu de temps et je veux voir les noms de fichiers comme ils sont traités, mais à la fin j'ai encore envie de la sortie dans une variable parce que je vais être l'analyser plus tard.

Est-il un "cleaner" pour cela?

Si cela fait une différence, j'utilise Ubuntu 12.04, bash 4.2.24.

InformationsquelleAutor Mendhak | 2012-09-16