Nach Ich versuchte die meisten Lösungen hier, das einfachste, was ich fand, war das Offensichtliche - eine temporäre Datei zu verwenden. Ich bin nicht sicher, was Sie mit Ihrer mehrzeiligen Ausgabe machen wollen, aber Sie können dann zeilenweise mit Lesen umgehen.Über das einzige, was Sie nicht wirklich tun können, ist es, alles in die gleiche Variable zu stecken, aber für die meisten praktischen Zwecke ist dies viel einfacher zu handhaben.
./myscript.sh > /tmp/foo
while read line ; do
echo 'whatever you want to do with $line'
done < /tmp/foo
Schnell Hack es die angeforderte Aktion auszukommen:
result=""
./myscript.sh > /tmp/foo
while read line ; do
result="$result$line\n"
done < /tmp/foo
echo -e $result
Hinweis dies fügt eine zusätzliche Zeile. Wenn du daran arbeitest, kannst du damit umgehen, ich bin einfach zu faul.
EDIT: Während dieser Fall sehr gut funktioniert, Menschen lesen sollten sich bewusst sein, dass Sie einfach Ihre stdin innerhalb der while-Schleife quetschen können, so dass Sie ein Skript geben, die eine Zeile, klare stdin laufen wird, und Ausfahrt . Wie ssh wird das tun, denke ich? Ich habe es gerade erst gesehen, andere Codebeispiele hier: https://unix.stackexchange.com/questions/24260/reading-lines-from-a-file-with-bash-for-vs-while
Noch einmal! Diesmal mit einem anderen Dateihandle (stdin, stdout, stderr sind 0-2, also können wir & 3 oder höher in bash verwenden).
result=""
./test>/tmp/foo
while read line <&3; do
result="$result$line\n"
done 3</tmp/foo
echo -e $result
Sie können auch mktemp verwenden, aber dies ist nur ein schnelles Codebeispiel. Die Verwendung für mktemp sieht so aus:
filenamevar=`mktemp /tmp/tempXXXXXX`
./test > $filenamevar
Verwenden Sie dann $ filenamevar wie Sie den tatsächlichen Namen einer Datei. Muss wohl hier nicht erklärt werden aber jemand hat sich in den Kommentaren beschwert.
es überrascht mich. hast du nicht $ (cat ./myscipt)? sonst hätte ich erwartet, dass es versucht Befehle auszuführen abc, def und ghi –
@litb: ja, nehme ich an; Sie können auch $ (<./ meinscript) verwenden, wodurch die Ausführung eines Befehls vermieden wird. –
(NB: die beiden obigen Kommentare beziehen sich auf eine Revision der Frage, die begann _Ich habe ein Skript 'myscript', das folgendes enthält, was zu den Fragen führte. Die aktuelle Überarbeitung der Frage (_Ich habe ein Skript "myscript", das das folgende ausgibt, macht die Kommentare überflüssig. Die Überarbeitung stammt jedoch vom 2011-11-11, lange nachdem die beiden Kommentare gemacht wurden. –