Eu acho que o jeito que você está usando é a parte confusa. O problema é que você não está apenas chamando get_info
, você está usando o resultado disso como parte de outro comando ( echo
here). Esse outro comando é bem-sucedido e, portanto, a condição de erro nunca aciona a saída do bash. Você pode ver isso se você estender seu script um pouco:
echo "info: $(get_info)"
echo "ok"
v=$(get_info)
printf 'info2: %s\n' "$v"
printf 'ok2\n'
nunca chegará à info2
print, porque sai durante a atribuição da variável.
set -e
é realmente complicado, geralmente não é recomendado. Você pode ler mais sobre isso aqui e aqui