me gustaría enviar el resultado de una serie de comandos a una variable:estado de tuberías después de la sustitución de comandos
variable=$(a | few | commands)
Sin embargo, la sustitución comando restablece PIPESTATUS
, por lo que no puede inspeccionar en el que salió mal después del hecho. Una solución sería utilizar mktemp
y poner el resultado allí temporalmente:
variable_file=$(mktemp) || exit 1
a | few | commands > $variable_file
exit_codes="${PIPESTATUS[*]}"
variable=$(<$variable_file)
¿Hay una solución más elegante?
De hecho, esta es una buena pregunta. Creo que no hay mejor solución que la tuya, espero que alguien me demuestre que estoy equivocado ;-) Probablemente conozcas "set -o pipefail", pero de todos modos esto es (más o menos) ortogonal a tu pregunta. – tokland
Ok, estoy intrigado porque lo hago de la misma manera que tú ... y funciona ... pero si hay algo más elegante ... déjame tenerlo ... – Cipi
Ver esta [pregunta] (http://stackoverflow.com/questions/3450960/using-xargs-to-assign-stdin-to-a-variable) para obtener más ideas. Ver también [aquí] (http://stackoverflow.com/questions/2413166/bash-redirect-and-append-stdout-and-stderr-to-file-and-terminal). –