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?