He estado siguiendo algunas de las preguntas similares (como How to set a variable to the output from a command in Bash?), sin embargo, las respuestas aceptadas parecen no funcionar para mí. No estaba seguro de si debería descarrilar la pregunta de otra persona o publicar mi propio duplicado, así que me disculpo si escogí mal aquí.Cómo obtener salida de un comando bash en una variable
Deseo obtener el estado de salida y salida de una serie de comandos en un script que estoy reuniendo. Aquí está un ejemplo de lo que he estado usando:
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
El registro y rechazo funciones son:
# 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
}
En el ejemplo anterior utilizo el formato $ (cmd), pero también he intentado usando apoyos.
En mi archivo de registro, todo lo que veo cuando hay un fallo es:
FATAL ERROR: Failed to remove the original, the output was: \n
Además, la salida de los comandos fallidos termina en la pantalla como de costumbre. ¿Hay alguna razón común por la que mis variables cmd_output permanezcan vacías?
Me alegro de empujarte por encima de la marca 1000, sigue publicando! – shellter
Hola Janito, muchas gracias por tu respuesta! Soy consciente de los tres flujos estándar y operadores de redirección, pero la única razón por la que los he utilizado hasta ahora es para enviar todo desde un comando a/dev/null o a un archivo de registro. Ni siquiera consideré las diferentes corrientes aquí. La variable $ file en realidad estaba originalmente entre comillas, lo saqué de comillas cuando estaba probando las funciones de captura de errores de mi script, para forzar un error. Nuevamente, ¡muchas gracias! –