¿Hay una manera de capturar la salida de un comando, y su valor de retorno en variables en un script de shell?

StackOverflow https://stackoverflow.com/questions/1746273

  •  20-09-2019
  •  | 
  •  

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?

¿Fue útil?

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:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top