(Peut-être liée à Do some programs not accept process substitution for input files?)substitution de processus Bash et la synchronisation
Dans certains scripts de tests unitaires Bash J'utilise l'astuce suivante pour vous connecter et stdout d'affichage et stderr d'une commande:
command > >(tee "${stdoutF}") 2> >(tee "${stderrF}" >&2)
Ce processus produit une sortie vers stdout, donc le fichier $stdoutF
obtient des données. Ensuite, je lance une autre commande qui ne transmet pas les données:
diff -r "$source" "$target" > >(tee "${stdoutF}") 2> >(tee "${stderrF}" >&2)
Cependant, il ne semble pas que ce processus se termine toujours avec succès avant le test de vide est exécuté (en utilisant shunit-ng):
assertNull 'Unexpected output to stdout' "$(<"$stdoutF")"
Lors d'un test de 100 tests, celui-ci a échoué 25 fois.
Faut-il suffisant pour appeler sync
avant de tester le fichier pour le vide:
sync
assertNull 'Unexpected output to stdout' "$(<"$stdoutF")"
... et/ou devrait-il fonctionner en forçant la séquence des commandes:
diff -r "$source" "$target" \
> >(tee "${stdoutF}"; assertNull 'Unexpected output to stdout' "$(<"$stdoutF")")
2> >(tee "${stderrF}" >&2)
. .. et/ou est-il possible tee
en quelque sorte à assertNull
directement à la place d'un fichier?
Mise à jour: sync
n'est pas la réponse - Voir la réponse de Gilles ci-dessous.
Mise à jour 2: Discussion effectuée en outre à Save stdout, stderr and stdout+stderr synchronously. Merci pour les réponses!
Merci pour cette réponse impressionnante, ce vient de me faire une meilleure administration! –