run est un fichier qui traite une entrée de stdin et affiche un résultat sur stdout
quand j’écris:
$ ./run actual.json $ diff out.json actual.json
Je comprends qu’il n’y a pas de différence
alors quand j’écris:
$ ./run actual.json | diff out.json actual.json
Je m’attends à ce qu’il n’y ait pas de différence mais à la place, il y a une différence qui est tout dans out.json
Quelle est la différence entre ces deux commandes? D’après ce que je comprends, la commande (|) exécute la commande sur la gauche, puis la commande sur la droite, donc elles doivent être les mêmes.
D’après ce que je comprends, la commande (|) exécute la commande sur la gauche, puis la commande sur la droite, donc elles doivent être les mêmes.
C’est complètement faux.
Les deux programmes sont exécutés en même temps; la sortie du premier est redirigée vers l’entrée du second.
Cela signifie que dans votre
$ ./run < in.json > actual.json | diff out.json actual.json
diff
est démarré lorsque actual.json
n’est pas écrit, donc vide, donc out.json
est nouveau.
Vous pouvez laisser le diff commencer lorsque ./run est terminé.
./run
Lorsque vous utilisez uniquement actual.json
pour votre diff, vous pouvez le faire
diff out.json <(./run < in.json)
EDIT: Comme suggéré par @Glenn, j'ai supprimé des exemples non pertinents.