Ich tee
leite den gleichen Inhalt an mehrere Befehle mit Subshells und Weiterleitungen wie folgt weiter:
#!/usr/bin/env bash
echo 'hello' | tee \
>( sleep 3; cat /dev/stdin ) \
>( sleep 2; cat /dev/stdin ) \
>( sleep 1; cat /dev/stdin )
wait # Doesn't work :(
Ich sehe jedoch, dass die Subshell-Ausgabe nach dem Beenden des Hauptskripts in das Terminal geschrieben wird und wait
nicht funktioniert:
$ ./test.sh
hello
$ hello
hello
hello
Wie kann man richtig auf die Subshells warten?
zsh
istwait
-ing für die Kinder ...Antworten:
In
bash
können Sie nicht auf die Prozessersetzung warten. Im:Der gesamte Befehl wird sofort
cmd1
beendet, unabhängig vom Status voncmd2
.Sie müssen einen Mechanismus implementieren, um dem übergeordneten Prozess zu signalisieren, dass der Vorgang
cmd2
abgeschlossen ist. Ein einfacher Weg mit einem Fifo:quelle