Bash: falha no erro durante uma seção e, em seguida, executa outra seção, independentemente disso?

1

Gostaria de executar uma série de comandos dentro de parte de um script e interromper se algum retornar um status de saída diferente de zero. Mas também, dentro do mesmo script , eu gostaria que um comando final fosse sempre executado, independentemente de algo ter falhado antes.

#!/usr/bin/env bash
set -e
(
  # various commands go here
) &> /var/log/logfile
final_command_that_always_runs /var/log/logfile

Isso é possível?

Talvez eu possa 'set-e' para apenas uma () seção de um script?

    
por mikemaccana 18.09.2012 / 19:09

1 resposta

2

Parêntes invocam um subshell, então sim, você pode definir opções dentro e elas não afetarão o shell pai.

Editar da pergunta: : Eu marquei isso como a resposta, mas achei que precisava de uma demonstração - como a resposta diz, eu precisava mover o conjunto -e para dentro dos parênteses:

#!/usr/bin/env bash
(
    set -e
    echo 'one'
    ls -la /var/notexist/two
    echo 'three'
) &> /var/tmp/logfile
cp /var/tmp/logfile /var/tmp/logfile2
    
por 18.09.2012 / 19:14

Tags