Normalmente, em um script de shell, até mesmo uma linha que gera um erro não interrompe a execução do script de shell. Ele irá apenas para a próxima linha.
A exceção notável é se você definiu o sinalizador para sair do shell se algum subcomando falhar. Isso às vezes é feito adicionando "set -e" próximo ao topo de um script. Se você tem algo parecido em seu script, ele aborta em qualquer comando no script que retorna um erro. Suas opções neste caso são:
-
Remova essa opção. Isso pode ter ramificações para o resto do seu script, então não faça isso por capricho.
-
Desative a opção da seção do script em que você está e, em seguida, ligue-a novamente para continuar:
set +e zip -d archive.zip file.txt set -e
-
Forneça uma saída para a linha com falha, para que o shell veja o comando como um sucesso, mesmo que algo falhe. Isso pode ser feito de várias maneiras, mas uma simples é usar o operador OR:
zip -d archive.zip file.txt || true
Isto irá executar o comando zip, mas se falhar, irá executar o comando true e o shell pai irá obter o código de retorno (que é claro, um sucesso). Você pode ver isso às vezes escrito
||:
, que é um pouco mais rápido e mais complicado, mas não mágico; O:
simplesmente é um comando embutido no shell que também retorna um código de erro de sucesso mesmo que não faça nada.Outra maneira de fazer isso é executar o comando em um sub-shell cercando-o em
()
para que, enquanto o comando dentro dele, possa falhar, o subshell terá feito seu trabalho para que o script pai comset -e
conjunto não vai morrer. Isso é sub-ótimo para um único comando, mas pode ser útil se você quiser executar um conjunto de coisas.
Por outro lado, se você quiser apenas suprimir a mensagem de erro gerada pelo zip, é possível redirecionar o fluxo de erro padrão para / dev / null com ( 2> /dev/null
) para suprimir as mensagens geradas (ou fechá-lo com 2>&-
).