Returncode aus subshell als Returncode der Funktion?

29/01/2009 - 11:56 von Manuel Reimer | Report spam
Hallo,

ich stehe vor dem Problem, dass ich eine Funktion bauen muss, die eine
bestimmte Textdatei (/etc/mailcap) nach bestimmtem Muster nach einer
Zeichenkette prüft. Stark vereinfacht sieht das so aus:

typeinmailcap() {
mailcap="$1"
mimetype="$2"
sed -n 's/^\([a-z]\+\/[a-z*-]\+\) *;.*/\1/p' "$mailcap" | \
while read line; do
if [ x$line = x$mimetype ]; then return 0; fi
done
return 1
}
if typeinmailcap "/etc/mailcap" "image/png"; then echo "match!"; fi

Wenn ein Match vorliegt, dann steige ich in der Funktion mit Errorcode 0
aus. andernfalls 1. so zumindest die Theorie, denn mein "return 1" wird
immer ausgeführt, weil das "return 0" in der Subshell, die durch die
Pipe entsteht, wohl nur die Subshell beendet.

Irgendwer eine gute Idee?

CU

Manuel

www.jetzt-abwaehlen.de Wàhlen gehen 2009! Ein Aufruf etwas zu àndern.
Der Mensch erfand Maschinen, um sich damit die Arbeit zu erleichtern.
Nur leider hat er vergessen, rechtzeitig damit aufzuhören...
Beitràge mit *X-No-Html Header* kann ich weder lesen, noch beantworten!
 

Lesen sie die antworten

#1 helmut
29/01/2009 - 12:16 | Warnen spam
Hallo, Manuel,

Du meintest am 29.01.09:

[...]

sed -n 's/^\([a-z]\+\/[a-z*-]\+\) *;.*/\1/p' "$mailcap" | \
while read line; do
if [ x$line = x$mimetype ]; then return 0; fi
done
return 1



Wenn ein Match vorliegt, dann steige ich in der Funktion mit
Errorcode 0 aus. andernfalls 1. so zumindest die Theorie, denn mein
"return 1" wird immer ausgeführt, weil das "return 0" in der
Subshell, die durch die Pipe entsteht, wohl nur die Subshell beendet.

Irgendwer eine gute Idee?



Meine Standard-Lösung:

while read line
do
echo tuwas
done <<EOF
$(Befehl)
EOF

Diese Konstruktion öffnet keine Sub-Shell in der "while"-Schleife.
Daniel Rakel hatte sie in dieser Newsgroup im Jahr 2003 genannt.

Viele Gruesse
Helmut

"Ubuntu" - an African word, meaning "Slackware is too hard for me".

Ähnliche fragen