He encontrado el comportamiento extraño para mí, que no puedo explicar. El siguiente código es un trabajo bien:valor de retorno de subshell y salida a variables locales
function prepare-archive {
blah-blah-blah...
_SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
exit $?
blah-blah-blah...
}
significa consigo valor que espero:
bash -x ./this-script.sh:
++ exit 1
+ _SPEC_FILE='/home/likern/Print/Oleg/print-service/packaging/print-service.spec
/home/likern/Print/Oleg/print-service/packaging/print-service2.spec'
+ exit 1
Tan pronto como agrego local
definición de variables:
local _SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
I Get siguiente :
bash -x ./this-script.sh:
++ exit 1
+ local '_SPEC_FILE=/home/likern/Print/Oleg/print-service/packaging/print-service.spec
/home/likern/Print/Oleg/print-service/packaging/print-service2.spec'
+ exit 0
$:~/MyScripts$ echo $?
0
Pregunta: ¿Por qué? ¿Lo que ha sucedido? ¿Puedo capturar la salida de subshell a la variable local
y verificar el valor de retorno de subshell de manera confiable?
P.S.: prepare-archive
se llama en el script de shell principal. La primera exit
es la función exit
de check-spec-file
, la segunda de la función prepare-archive
- esta función se ejecuta desde la secuencia de comandos principal. Devuelvo el valor de check-spec-file
por exit 1
, luego paso este valor a exit $?
. Por lo tanto, espero que sean lo mismo.
¿En qué contexto se llama 'prepare-archive'? La '++ exit 1' no encaja con ningún código que hayas mostrado. – chepner