Considere el siguiente código
external-scope.sh
#!/bin/bash
set -e
source inner-scope.sh
echo $(inner)
echo "I thought I would've died :("
inner-scope.sh
#!/bin/bash
function inner() { echo "winner"; return 1; }
Estoy tratando de outer-scope.sh
salir cuando inner()
falla una llamada . Dado que $()
invoca un sub-shell, esto no sucede.
¿De qué otra manera obtengo el resultado de una función al tiempo que preservo el hecho de que la función puede salir con un código de salida distinto de cero?
echo $()
, podría ser porque los códigos de salida de las subcapas se ignoran cuando la línea, elecho
comando, tiene un código de salida (generalmente 0) propio.if ! $(exit 1) ; then echo $?; fi
, me sale0
. Noif
está seguro de cuál es el camino a seguir si necesita preservar ese valor de salida.if ! output=$(inner); then exit $?; fi
saldrá con un código de retorno de 0 porque$?
dará el código de retorno de en!
lugar del código de retorno deinner
. Puede obtener el comportamiento deseado,if output=$(inner); then : ; else exit $?; fi
pero eso es obviamente más detallado