Después de probar la mayoría de las soluciones aquí, lo más fácil que encontré fue lo obvio: usar un archivo temporal. No estoy seguro de lo que quiere hacer con su salida de línea múltiple, pero luego puede manejarlo línea por línea usando lectura. Lo único que realmente no puede hacer es pegarlo fácilmente en la misma variable, pero para la mayoría de los propósitos prácticos es mucho más fácil de manejar.
./myscript.sh > /tmp/foo
while read line ; do
echo 'whatever you want to do with $line'
done < /tmp/foo
Hack rápido para que haga la acción solicitada:
result=""
./myscript.sh > /tmp/foo
while read line ; do
result="$result$line\n"
done < /tmp/foo
echo -e $result
Tenga en cuenta que esto agrega una línea adicional. Si trabajas en él, puedes codificarlo, soy demasiado vago.
EDITAR: Si bien este caso funciona perfectamente bien, las personas que lo lean deben ser conscientes de que puede aplastar fácilmente su stdin dentro del bucle while, lo que le dará un script que ejecutará una línea, borrará el stdin y saldrá. ¿Como ssh hará eso, creo? Lo acabo de ver recientemente, otros ejemplos de código aquí: /unix/24260/reading-lines-from-a-file-with-bash-for-vs-while
¡Una vez más! Esta vez con un identificador de archivo diferente (stdin, stdout, stderr son 0-2, por lo que podemos usar & 3 o superior en bash).
result=""
./test>/tmp/foo
while read line <&3; do
result="$result$line\n"
done 3</tmp/foo
echo -e $result
También puede usar mktemp, pero este es solo un ejemplo de código rápido. El uso de mktemp se ve así:
filenamevar=`mktemp /tmp/tempXXXXXX`
./test > $filenamevar
Luego use $ filenamevar como lo haría con el nombre real de un archivo. Probablemente no necesite ser explicado aquí, pero alguien se quejó en los comentarios.