Después probando 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 qué quiere hacer con su salida de línea múltiple, pero puede tratarlo línea por línea usando leer.Lo único que realmente no se puede hacer es pegar fácilmente todo en la misma variable, pero para la mayoría de los propósitos prácticos es más fácil lidiar con esto.
./myscript.sh > /tmp/foo
while read line ; do
echo 'whatever you want to do with $line'
done < /tmp/foo
truco rápido para que hiciera la acción solicitada:
result=""
./myscript.sh > /tmp/foo
while read line ; do
result="$result$line\n"
done < /tmp/foo
echo -e $result
Nota esto añade una línea adicional. Si trabajas en él puedes codificarlo, soy demasiado flojo.
EDIT: Si bien este caso funciona perfectamente bien, la gente que lee esto debe ser consciente de que puede aplastar fácilmente su entrada estándar en el interior del bucle while, lo que te da un script que se ejecutará una línea, la entrada estándar clara, y la salida . Al igual que ssh hará eso, creo? Acabo de verlo recientemente, otros ejemplos de código aquí: https://unix.stackexchange.com/questions/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, entonces 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. Uso de mktemp parece:
filenamevar=`mktemp /tmp/tempXXXXXX`
./test > $filenamevar
A continuación, utilice $ 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.
me sorprende. ¿no tienes $ (cat ./myscipt)? de lo contrario, habría esperado que intentara ejecutar comandos abc, def y ghi –
@litb: sí, supongo que sí; también puede usar $ (<./ myscript) que evita ejecutar un comando. –
(NB: los dos comentarios anteriores se refieren a una revisión de la pregunta que comenzó _Tengo un script 'myscript' que contiene lo siguiente_, lo que llevó a las preguntas. La revisión actual de la pregunta (_Tengo un guión) 'myscript' que da como resultado lo siguiente_) hace que los comentarios sean superfluos. Sin embargo, la revisión es de 2011-11-11, mucho después de que se hicieron los dos comentarios. –