PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pipes in der Shell



morpheus2001
27.01.07, 13:36
Hi,

ich möchte mithilfe von Pipes die Standardausgabe eines Scripts in ein anderes übertragem:


script1 | script2

Soweit sogut, die Ausgabe von script1 kann ich über stdin in script2 auffangen und weiterverarbeiten. Jetzt kommt das Problem: Ich möchte die Rückgabewerte beider Programm betrachten:


script1 | script2
echo ?$ # Gibt den Rückgabewert von script2 zurück

Hat jemand eine Idee, wie ich an den Rückgabewert von script1 rankomme?

MfG
D.Morlock

suck
27.01.07, 15:41
echo $PIPESTATUS

moedule
28.01.07, 17:22
script1 | tee output_script1.txt | script2

dann wird die ausgabe von script1 noch in die datei output_script1.txt geschrieben

moe

sepp2k
28.01.07, 17:45
script1 | tee output_script1.txt | script2

dann wird die ausgabe von script1 noch in die datei output_script1.txt geschrieben
Er wollte aber nicht die Ausgabe sondern den Rückgabewert.

moedule
29.01.07, 00:18
stimmt :-) bei genauerem Lesen stellt man das fest

moe

streuner
29.01.07, 10:20
Man könnte vielleicht im zweiten Skript als erstes den Rückgabewert in einer anderen Variablen speichern. Diese kann dann weiterverarbeitet oder exportiert werden. Vielleicht lieg ich da ber auch völlig falsch...

suck
29.01.07, 16:37
Da es scheinbar noch nicht ganz klar rüberkam hier ein Beispiel:


# ls -1 | grep Weltraum | grep 200
# echo Rückgabewerte waren: ${PIPESTATUS[@]}
Rückgabewerte waren: 0 0 1


# ls -1 | grep Weltraum | grep 200
# for i in "${PIPESTATUS[@]}"
do
test $i != 0 && echo 'Ein Fehler trat auf!'
done
Ein Fehler trat auf!


# ls -1 | grep Weltraum
# echo Erster Rückgabewert war: ${PIPESTATUS[0]}
Erster Rückgabewert war: 0


# asdfgh | grep Weltraum
bash: asdfgh: command not found
# echo Erster Rückgabewert war: ${PIPESTATUS[0]}
Erster Rückgabewert war: 127

morpheus2001
29.01.07, 20:16
Hi,

danke für die ausführliche Hilfe ;-)

PIPESTATUS war exakt das, was ich gesucht hab! :) Danke Euch!

Gruß
Daniel