C'è un modo per catturare l'output di un comando, e il suo valore di ritorno in variabili in uno script di shell?

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

  •  20-09-2019
  •  | 
  •  

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?

È stato utile?

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:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top