Ho trovato lo strano comportamento per me, che non riesco a spiegare. Il seguente codice è un lavoro OK:valore di ritorno da subshell e output a variabili locali
function prepare-archive {
blah-blah-blah...
_SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
exit $?
blah-blah-blah...
}
significa ottengo valore che mi aspetto:
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
Non appena aggiungo local
definizione di variabile:
local _SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
ottengo seguente :
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
Domanda: Perché? Cos'è successo? Posso rilevare l'output dalla subshell alla variabile local
e controllare il valore di ritorno della sottoscocca in modo affidabile?
P.S.: prepare-archive
viene chiamato nello script della shell principale. Il primo exit
è il dalla funzione check-spec-file
, il secondo dalla funzione prepare-archive
- questa funzione viene eseguita dallo script della shell principale. Rendo il valore da check-spec-file
per exit 1
, quindi passa questo valore a exit $?
. Quindi mi aspetto che dovrebbero essere uguali.
In quale contesto viene chiamato 'prepare-archive'? '++ exit 1' non si adatta a nessun codice che hai mostrato. – chepner