Darüber bin ich gerade böse gestolpert: In eigenen Unterfunktionen darf man nicht mit exit arbeiten, sondern mit return. Exit ist nur für das Ende des ganzen Skripts bestimmt und vorher nicht mit $? auslesbar.
Also:
abc(){
...
return 0
}
abc
if [[ $? -eq 0 ]];then
echo in
fi
funktioniert,
abc(){
...
exit 0
}
abc
if [[ $? -eq 0 ]];then
echo in
fi
dagegen nicht.