Znalazłem dla mnie dziwne zachowanie, którego nie potrafię wyjaśnić. Poniższy kod jest praca OK:Wartość zwracana z podpowłoki i wyjście do zmiennych lokalnych
function prepare-archive {
blah-blah-blah...
_SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
exit $?
blah-blah-blah...
}
Oznacza uzyskać wartość, która spodziewam:
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
Jak tylko dodam local
definicję zmiennej:
local _SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
otrzymuję następujący :
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
Pytanie: Dlaczego? Co się stało? Czy mogę przechwytywać dane wyjściowe z podpowłoki do zmiennej local
i niezawodnie sprawdzić wartość zwracaną przez powłokę?
P.S.: prepare-archive
jest wywoływane w głównym skrypcie powłoki. Pierwsza exit
jest funkcją exit
z check-spec-file
, druga z funkcji prepare-archive
- ta sama funkcja jest wykonywana z głównego skryptu powłoki. Zwracam wartość z check-spec-file
przez exit 1
, następnie przekazuję tę wartość do exit $?
. Tak więc oczekuję, że powinny być takie same.
W jakim kontekście wywoływane jest 'prepare-archive'? '++ exit 1' nie pasuje do żadnego z pokazywanych przez ciebie kodów. – chepner