read mit Pipe

08/07/2011 - 09:09 von Ferry Bolhar | Report spam
Hallo,

ich habe einen Befehl (mquery), der nach STDOUT schreibt. Er
liefert einen CSV-String zurück.

Ich möchte die Ausgabe gerne in ein Array einlesen, wobei jedes
CSV-Element in einem Array-Element abgelegt wird. Ich probiere
es mit:

mquery | sed 's/,/ /g' | read -a values

Ein

echo ${values[@]}

liefert leider nichts zurück, dass Array ist leer. Auch ein

echo hallo | read a

funktioniert nicht erwartungsgemàß, die Variable a ist leer.

Nach der Dokumentation liest read von STDIN, also sollte
ein Piping in der gezeigten Form doch möglich sein. Aber ich
mache sichtlich etwas falsch. Kann mir wer helfen?

Ich verwende die bash, Version 3.2.39 unter RH Linux.

Grüße aus Wien,

Ferry

Ing. Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: ferdinand.bolhar-nordenkampf@wien.gv.at
 

Lesen sie die antworten

#1 Jochen Lübbers
08/07/2011 - 11:02 | Warnen spam
Ferry Bolhar schrieb:
[...] Auch ein

echo hallo | read a

funktioniert nicht erwartungsgemàß, die Variable a ist leer.



'|' làsst das nachfolgende 'read a' in einer eigenen Shell laufen
(Subshell). Damit Du an den Inhalt kommst ist etwas mehr Arbeit nötig.

Für das kleine Testbeispiele tut es schon ein:

echo hallo | (read a; echo $a)

HTH
Jochen
"Wer die Freiheit aufgibt, um Sicherheit zu gewinnen,
der wird am Ende beides verlieren"

Ähnliche fragen