Этот пример был протестирован на Mac El Capitan с БашБаш подстановки команд на функцию внешнего сценария получает неверный статус выхода
main_script.sh:
Примечание: func_a и func_b идентичны, за исключением того, что линии объявляется локальная переменная
output
.
func_a() {
local output
output="$(./external.sh some_function)"
if [ $? -eq 0 ];then
echo "A zero result ($?) -> $output <- end"
else
echo "A other result ($?) -> $output <- end"
fi
}
func_b() {
local output="$(./external.sh some_function)"
if [ $? -eq 0 ];then
echo "B zero result ($?) -> $output <- end"
else
echo "B other result ($?) -> $output <- end"
fi
}
func_a
func_b
external.sh:
some_function() {
echo "this is the output"
return 1
}
"[email protected]"
Когда я бегу main_script выход:
A other result (1) -> this is the output <- end
B zero result (0) -> this is the output <- end
По какой причине бы объявление локальной переменной на той же строке, что влияет на результат? Может быть, это ошибка или я что-то пропустил?
Это может помочь: [Как отлаживать скрипт bash?] (Http://unix.stackexchange.com/q/155551/74329) – Cyrus
Хорошо известно, как отлаживать скрипт bash и что задает -x. Я просто старался сделать вывод максимально ясным. Я знаю, в чем проблема, теперь мне интересно, почему. Кажется, объявление локального var возвращает ноль, несмотря ни на что .. Похоже на ошибку bash? – arctelix