(...)
não é (principalmente) para os comandos grupo , mas para iniciar uma sub-rede. Portanto, o exit
em (echo failed && exit 1)
só sai da sub-rede.
Para agrupar comandos sem executá-los em um subshell, você usaria { ...; }
:
X='getinfo.sh' || {
echo >&2 "failed"
exit 1
}
Embora aqui, eu prefiro usar:
if ! x=$(getinfo.sh); then
echo >&2 failed
exit 1
fi
Observe também que echo failed && exit 1
pode falhar ao sair se echo
falhar, o que pode acontecer quando o stdout for um arquivo em um sistema de arquivos completo ou se um tubo quebrado for ignorado pelo SIGPIPE ou se o stdout tiver sido fechado ou um limite de tamanho de arquivo foi atingido com SIGXFSZ ignorado ...