O que set -e faz?

28

Eu tenho um script que encontrei e estou tentando executá-lo, ele apenas baixa e instala as bibliotecas de tempo de execução Apache. A primeira linha é set -ee está causando um erro; o que set -efaz?

spitfiredd
fonte

Respostas:

22

Esse recurso é tão complicado que merece sua própria seção.

set permite alterar os valores das opções do shell e definir os parâmetros posicionais ou exibir os nomes e valores das variáveis ​​do shell.

A -eopção

-e

Saia imediatamente se um pipeline (consulte Pipelines), que pode consistir em um único comando simples (consulte Comandos Simples), um comando de subshell entre parênteses (consulte Agrupamento de Comandos) ou um dos comandos executados como parte de uma lista de comandos incluída por chaves (consulte Agrupamento de comandos) retorna um status diferente de zero. O shell não sai se o comando que falha faz parte da lista de comandos imediatamente após uma palavra-chave while ou while, parte do teste em uma instrução if, parte de qualquer comando executado em um && ou || list exceto o comando após o final && ou ||, qualquer comando em um pipeline, exceto o último, ou se o status de retorno do comando estiver sendo invertido com! Uma interceptação no ERR, se definida, é executada antes da saída do shell.

Essa opção se aplica ao ambiente do shell e a cada ambiente de subshell separadamente (consulte Ambiente de execução de comando) e pode causar a saída de subshells antes de executar todos os comandos no subshell.

Fonte: www.gnu.org

Editado devido ao comentário de @ psusi abaixo.

Além disso, você pode ler a página de manual do bash

man bash 

na seção: SHELL BUILTIN COMMANDS

ou emitir

help set 

para uma breve mensagem de ajuda.

NickTux
fonte
1
Como é um comando interno, você deseja help sete o manual completo do bash é info bash, se você tiver o bash-doc instalado.
Psusi
Obrigado pelo esclarecimento @psusi. help sete / ou man bashsão os corretos para set.
NickTux
12

set -e em resumo, quando está na parte superior do script bash, diz ao script para sair assim que qualquer linha do script falhar (com algumas exceções listadas no manual). [1]

Como opção de depuração, costuma ser usada com set -x, que é imprimir cada linha de comando expandida antes da execução com um sinal "+". [2]

Veja mais em:

[1] https://www.peterbe.com/plog/set-ex

[2] http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html

Devy
fonte
2
Obrigado pela explicação simples. Muitas vezes vejo -XE set em Dockerfiles e agora eu sei a razão :)
ymakux