2009-03-08 6 views
1

Der Standardweg Befehlsausgabe in Bourne-Shell zu erfassen ist, die $() Syntax:Wie erfasse ich die Ausgabe eines Befehls in einen Dateideskriptor in der Bourne-Shell?

output=$(mycommand) 

Für Befehle, die eine Menge von Ausgabe haben, erfordert jedoch, das der Schale Speicher für das Ganze als eine lange zuteilen Zeichenfolge. Ich würde es vorziehen, etwas zu finden, das das moralische Äquivalent der Unix-C-Funktion nicht popen, einen neuen Dateideskriptor zu erhalten, ich könnte read aus:

newfd=popen(mycommand) 
while read -u $newfd LINE; do 
    #process output 
done 

Ist das überhaupt möglich?

+0

bash4 eine schöne neue Funktion hat: coproc. es wäre ideal für dich! Schade, es ist immer noch so neu –

Antwort

7
#!bash 
ls | while read X 
do 
    echo $X is a directory entry 
done 

Ersetzen 'ls' mit dem Befehl Ihrer Wahl

+0

Völlig offensichtlich, sobald Sie es sehen. Danke für die schnelle Antwort! –

+1

Beachten Sie, dass die while-Schleife in einer Subshell ausgeführt wird. Daher werden alle Änderungen an Variablen nicht an den Rest des Skripts zurückgegeben. – pixelbeat

+0

Ersetzen Sie zum Beispiel 'ls' mit find und echo mit' printf'. –

Verwandte Themen