Après avoir essayé la plupart des solutions ici, la chose la plus simple que j'ai trouvée était évidente - en utilisant un fichier temporaire. Je ne suis pas sûr de ce que vous voulez faire avec la sortie de plusieurs lignes, mais vous pouvez ensuite traiter cela ligne par ligne en utilisant la lecture. La seule chose que vous ne pouvez pas vraiment faire est de tout coller facilement dans la même variable, mais pour la plupart des raisons pratiques, c'est beaucoup plus facile à gérer.
./myscript.sh > /tmp/foo
while read line ; do
echo 'whatever you want to do with $line'
done < /tmp/foo
Hack rapide pour lui faire faire l'action demandée:
result=""
./myscript.sh > /tmp/foo
while read line ; do
result="$result$line\n"
done < /tmp/foo
echo -e $result
Notez que cela ajoute une ligne supplémentaire. Si vous travaillez dessus, vous pouvez le coder, je suis juste trop paresseux.
EDIT: Bien que ce cas fonctionne parfaitement, les personnes qui lisent ceci doivent savoir que vous pouvez facilement écraser votre stdin à l'intérieur de la boucle while, vous donnant ainsi un script qui exécutera une ligne, effacera stdin et quittera. Comme ssh fera ça je pense? Je viens de le voir récemment, d'autres exemples de code ici: /unix/24260/reading-lines-from-a-file-with-bash-for-vs- while
Encore une fois! Cette fois avec un descripteur de fichier différent (stdin, stdout, stderr valent 0-2, nous pouvons donc utiliser & 3 ou plus dans bash).
result=""
./test>/tmp/foo
while read line <&3; do
result="$result$line\n"
done 3</tmp/foo
echo -e $result
vous pouvez également utiliser mktemp, mais ce n'est qu'un exemple de code rapide. L'utilisation de mktemp ressemble à:
filenamevar=`mktemp /tmp/tempXXXXXX`
./test > $filenamevar
Utilisez ensuite $ filenamevar comme vous le feriez pour le nom réel d'un fichier. Il n'a probablement pas besoin d'être expliqué ici, mais quelqu'un s'est plaint dans les commentaires.