Warten bis "cat | sed" konstrukt beendet ist

P

panzaeron

Jungspund
Hallo,

ich verwende in einem Skript viele cat "$DATEI" | sed -e "/xy/${XY}/" > "$DATEI" Konstrukte hintereinander. Wobei ${XY} je nach Benutzereingabe variiert.

Wenn der Benutzer zu schnell die Daten ($XY) eingibt, wird der Inhalt von ${DATEI} gelöscht. Ich denke das liegt an einem nicht beendeten vorhergehenden cat | sed.
Eine künstliche Verzögerung mit sleep 5 zwischen den Befehlen ist zwar möglich, aber nicht optimal, da der Wert je nach ${DATEI} stark variiert.
Daher die Frage, wie ich es schaffe, die Abarbeitung des Skripts erst fortzusetzen, wenn der "cat | sed" Aufruf abgeschlossen ist?
 
Hallo

Das ist ein typischer Fall von useless use of cat

Warum:
Schau dir das mal genau an, was dabei rauskommt.

sed ließt aus der Pipe die Ausgabe von cat.
Da du sed aber selbst eine Datei übergeben kannst, kommt also das folgende - nicht funktionierende - Konstrukt raus.
sed -e "/xy/${XY}/" $DATEI > "$DATEI"
Dass das nicht geht, sagt dir die Manpage zu sed.
Entweder dein sed (GNU sed) kennt die Option -i oder du musst mit temporären Zwischendateien arbeiten.
GNU sed:
sed -i -e "s/xy/${XY}/" "$DATEI"
Oder mit Zwischendatei
sed -i -e "s/xy/${XY}/" "$DATEI" >Temp_file&&catTemp_file >$DATEI &&rm -f Temp_file

Gruß Wolfgang
 
Zuletzt bearbeitet:
Viel Dank für die Antwort :)

und wieder was dazu gelernt, mit -i klappt auch alles problemlos :)
 
Mit Zwischendatei, dann aber ohne -i oder Wolle? *g

sed -e "s/xy/${XY}/" "$DATEI" >Temp_file&&catTemp_file >$DATEI &&rm -f Temp_file
 
Zurück
Oben