Mit Bash-Prozess-Substitution möchte ich zwei verschiedene Befehle gleichzeitig in einer Datei ausführen. In diesem Beispiel ist es nicht notwendig, aber stellen Sie sich vor, dass "cat/usr/share/dict/words" eine sehr teure Operation ist, wie beispielsweise das Entpacken einer 50-GB-Datei.Falsche Ergebnisse mit Bash-Prozess-Substitution und Tail?
cat /usr/share/dict/words | tee >(head -1 > h.txt) >(tail -1 > t.txt) > /dev/null
Nachdem dieser Befehl ich h.txt erwarten würde die erste Zeile der Wörter enthalten „A“ Datei, und t.txt die letzte Zeile der Datei „Zyzzogeton“ enthalten.
Was jedoch tatsächlich passiert, ist, dass h.txt "A" enthält, aber t.txt enthält "argillaceo", was etwa 5% in der Datei ist.
Warum geschieht das? Es scheint so, als ob entweder der "Tail" -Prozess vorzeitig beendet wird oder die Ströme durcheinander geraten.
einen weiteren ähnlichen Befehl wie das Lauf verhält sich wie erwartet:
cat /usr/share/dict/words | tee >(grep ^a > a.txt) >(grep ^z > z.txt) > /dev/null
Nach diesem Befehl würde ich erwarten a.txt alle Wörter enthalten, die mit „a“ beginnen, während z.txt enthält alle von die Wörter, die mit "z" beginnen, was genau passiert ist.
Warum funktioniert das nicht mit "Tail", und mit welchen anderen Befehlen wird das nicht funktionieren?
Ich denke, dies zu http://stackoverflow.com zusammenhängt/questions/4489139/bash-process-substitution-and-syncing, was darauf hindeutet, dass die Prozesse mit der Substitution beendet werden, sobald der äußere Befehl beendet wird, aber ehrlich gesagt kann ich nicht zeigen, dass dies das aktuelle Problem mit Befehlen I ist habe bisher probiert –