Eu me deparei com um comportamento estranho hoje:
#!/bin/bash
set -ex
export a=$(cat foo)
echo "It's a living thing"
b=$(cat foo)
echo "This won't make it"
Isso não vai parar cat foo
mesmo que foo
não exista. Mas sem a exportação, falha. Por quê?
Dentro:
Esse é um comando simples sem parte de comando, portanto, o status de saída é o da substituição do comando. Dentro:
ou
Há uma parte de comando aqui (mesmo que em alguns shells,
export
esteja no meio do caminho entre um comando e uma palavra-chave), então seu status de saída é retornado. Secmd
falhar e não produzir nenhuma saídaexport a=
ainda será executado e bem-sucedido, entãoexport
retornará um status de saída 0.Aqui você deseja:
Ou melhor ainda, livre-se disso não confiável
set -e
e faça o tratamento de erros adequado à mão:Consulte, por exemplo , BashFAQ 015: "Por que o set -e não faz o que eu esperava?" para mais exemplos de por que e como
set -e
pode produzir resultados inesperados.