¿Hay una manera de capturar la salida de un comando, y su valor de retorno en variables en un script de shell?
Pregunta
Por lo tanto, vamos a decir que tengo una orden, foo
, en un guión que tiene tanto un valor de retorno, y una cadena de salida que me interesa y quiero para almacenar los en una variable (bueno, al menos su de salida para la variable y su valor de retorno podría ser utilizado para un condicional).
Por ejemplo:
a=$(`foo`) # this stores the output of "foo"
if foo; then # this uses the return value
stuff...
fi
Lo mejor que se me ocurrió para capturar esa salida es utilizar algún archivo temporal:
if foo > $tmpfile; then
a=$(`cat $tmpfile`)
stuff...
fi
¿Hay alguna forma de que pudiera simplificar?
Solución
out=$(cmd)
rv=$?
if test $rv -eq 0; then
echo "all good"
echo $out
else
echo "wtf, exit code was $rv"
fi
Por cierto, $ () y acentos abiertos son dos sintaxis para el mismo efecto, lo que significa que solamente ¿Quieres escribir
$(`foo`)
Si foo
da salida a un texto de un comando que desea ejecutar de nuevo. como:
foo()
{
echo echo date
}
$(foo)
$(`foo`)
Otros consejos
output=`foo`
echo "Return: $?" # $? is the return code
A partir de bash: (tenga en cuenta los primeros $ en la primera columna es mi sistema)
$ A=$(echo abc; false); echo status:$? A:$A
status:1 A:abc
No utilice $()
además acentos abiertos, como que realmente ejecuta el comando y luego ejecuta su salida.
Vea también: