Tenho certeza de que isso está postado em algum lugar, mas não consegui encontrá-lo.
No Bash, como alguém especifica a precedência do operador (também conhecido como agrupamento de comandos) sem criar um subshell? Na maioria das outras linguagens, o () faz isso, mas no Bash isso executa os comandos em um subshell que "descarta" mudanças no ambiente. Eu quero especificar a precedência do operador sem perder as alterações do ambiente.
Especificamente, gostaria de fazer algo assim e ter o script inteiro como saída, não apenas a subshell no () :
die ()
{
echo "[DIE]: $1"
exit 1
}
# When installChruby returns an error, print the error message and exit
[[ $CHRUBY =~ [Yy] ]] && (installChruby || die "Error installing chruby")
Eu descobri uma "solução alternativa" ao fazer isso, mas não é uma frase simples como eu quero:
if [[ $CHRUBY =~ [Yy] ]]; then installChruby || die "Error installing Chruby"; fi
O resultado desejado é não fazer nada e continuar se CHRUBY não estiver definido, chamar a função installChruby se CHRUBY for Y ou y e chamar a função die somente se a função installChruby retorna falso.
Existe um operador no Bash que faz isso além de () , ou existe uma maneira de dizer ao código dentro do () para não rodar em um sub-shell?