Ho seguito alcune delle domande simili (come How to set a variable to the output from a command in Bash?), tuttavia le risposte accettate sembrano non funzionare per me. Non ero sicuro di dover far deragliare la domanda di qualcun altro o di pubblicare il mio duplicato, quindi scusami se ho scelto male qui.Come ottenere l'output di un comando bash in una variabile
Desidero ottenere lo stato di uscita e di uscita di un numero di comandi in uno script che sto mettendo insieme. Ecco un esempio di quello che ho usato:
cmd_output=$(rm $file)
exit_status=$?
if [ "${exit_status}" -eq 0 ]
then
log "Successfully removed the original" ${TAB_LEVEL}
else
fail "Failed to remove the original, the output was: \n ${cmd_output}"
fi
Il registro e non riescono funzioni sono:
# Usage: fail "Failure message"
function fail {
echo "FATAL ERROR: $1" >> "${LOG_DIR}/${LOG_FILE}"
exit 1
}
# Usage: log "Log message" 3 Where the tab-level is 3.
function log {
if (("${2}" > 0))
then
eval "printf ' %.0s' {1..$2}" >> "${LOG_DIR}/${LOG_FILE}"
fi
echo "$1" >> "${LOG_DIR}/${LOG_FILE}"
return 0
}
Nel precedente esempio io uso il formato $ (cmd), ma ho anche provato usando i backtick.
Nel mio file di log, tutto quello che vedo quando c'è un fallimento è:
FATAL ERROR: Failed to remove the original, the output was: \n
Inoltre, l'output dei comandi falliti finisce sullo schermo come al solito. C'è una ragione comune per cui le mie variabili cmd_output sarebbero rimaste vuote?
Felice di spingerti oltre il marchio 1000, continua a postare! – shellter
Hey Janito, grazie mille per la tua risposta! Sono a conoscenza dei tre flussi standard e degli operatori di reindirizzamento, ma l'unica ragione per cui li ho usati finora è quello di inviare qualsiasi cosa da un comando a/dev/null o ad un file di registro. Non ho nemmeno considerato i diversi flussi qui. La variabile $ file era in realtà originariamente tra virgolette, l'ho tolta dalle virgolette quando stavo testando le funzioni di cattura degli errori del mio script, per forzare un errore. Ancora una volta, grazie molte! –