Вы не сказали этого, но, похоже, вы используете сценарий, содержащий эту функцию, которая завершается. Если вы используете его, то все так, как если бы каждая команда была набрана в командной строке ... так что выход будет выходить из любой оболочки, которую вы используете.
Для сценария, который всегда получен, используйте return
вместо exit
Если вы не знаете, будет ли сценарий получен или нет, вам нужно будет определить его и выбрать правильное поведение в зависимости от того, как он был вызван. Например:
some_function() {
read -p "Enter something: "
# Some commands
if [[ $? -gt 0 ]]; then
echo "error"
if [[ "${BASH_SOURCE[0]}" != "${0}" ]]; then
# sourced
. /whatever/location/script.sh && return 1
else
# not sourced
. /whatever/location/script.sh && exit 1
fi
fi
}