Evitar que o shell seja encerrado quando o set -e está ativado?

1

Eu tenho set -e ativado para o meu script. A única coisa é que há um comando aqui que não quero que o script saia se ele falhar, mas quero que todo o resto faça isso. Como posso manter set -e ativado e não ter meu script sair quando um código de erro é lançado?

script em questão:

native=$(pacman -Qenq -)

Se stdin tiver um nome de pacote não nativo, um código de erro será gravado em stdin.

    
por ZeroPhase 20.09.2017 / 04:27

2 respostas

3

set -e aka set -o errexit não se aplica a comandos que são partes de condições como:

if cmd; do
until cmd; do
while cmd; do
cmd || whatever
cmd && whatever

Isso também se aplica ao ERR trap para shells que o suportam.

Assim, uma maneira idiomática de ignorar a falha de um comando é com:

cmd || : errors ignored

Ou apenas:

cmd || true
cmd || :

Isso cancela set -e para essa invocação de cmd e também define $? para 0 (para a de : / true quando cmd falha)

cmd && true
ret=$?

Também cancela set -e , mas preserva o status de saída de cmd .

    
por 20.09.2017 / 18:31
0
> var=
> : ${var:=foo}
> echo "$var"
foo
    
por 20.09.2017 / 08:56