C'è un modo per catturare l'output di un comando, e il suo valore di ritorno in variabili in uno script di shell?
Domanda
Quindi, diciamo che ho un comando, foo
, in uno script che ha sia un valore di ritorno, e una stringa di output che mi interessa, e voglio salvare quelli in una variabile (bene almeno la sua output per la variabile, e il suo valore di ritorno potrebbe essere utilizzato per un condizionale).
Ad esempio:
a=$(`foo`) # this stores the output of "foo"
if foo; then # this uses the return value
stuff...
fi
La cosa migliore che mi veniva in mente per catturare che l'uscita è quella di utilizzare alcuni file temporaneo:
if foo > $tmpfile; then
a=$(`cat $tmpfile`)
stuff...
fi
C'è qualche cosa che potrebbe semplificare questo?
Soluzione
questo?
out=$(cmd)
rv=$?
if test $rv -eq 0; then
echo "all good"
echo $out
else
echo "wtf, exit code was $rv"
fi
btw, $ () e backticks sono due sintassi per lo stesso effetto, il che significa che si solo voglia di scrivere
$(`foo`)
se foo
emette un testo di un comando che si desidera eseguire di nuovo. come:
foo()
{
echo echo date
}
$(foo)
$(`foo`)
Altri suggerimenti
output=`foo`
echo "Return: $?" # $? is the return code
Da bash: (notare il primo $ nella prima colonna è il mio sollecito)
$ A=$(echo abc; false); echo status:$? A:$A
status:1 A:abc
Non utilizzare $()
più apici inversi, come che in realtà esegue il comando e poi esegue la sua produzione.
Vedi anche: