Ich habe das seltsame Verhalten für mich gefunden, was ich nicht erklären kann. Der folgende Code ist Arbeit OK:Rückgabewert von Subshell und Ausgabe an lokale Variablen
function prepare-archive {
blah-blah-blah...
_SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
exit $?
blah-blah-blah...
}
bedeutet, dass ich Wert bekommen, den ich erwarten:
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
Sobald ich local
Definition Variable hinzufügen:
local _SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
ich folgende erhalten :
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
Frage: Warum? Was ist passiert? Kann ich die Ausgabe von der Subshell auf die Variable local
abfangen und den Rückgabewert der Subshell zuverlässig überprüfen?
P.S.: prepare-archive
wird im Shell-Hauptskript aufgerufen. Die erste 10 ist die 10 von check-spec-file
Funktion, die zweite von prepare-archive
Funktion - diese Funktion selbst wird von Haupt-Shell-Skript ausgeführt. Ich gebe einen Wert von check-spec-file
durch exit 1
zurück und übergebe diesen Wert an exit $?
. Also erwarte ich, dass sie gleich sein sollten.
In welchem Kontext wird 'prepare-archive' aufgerufen? Der '++ exit 1' passt nicht zu dem Code, den Sie angezeigt haben. – chepner