Cosa fa set -e?


28

Ho uno script che ho trovato e sto cercando di farlo funzionare, scarica e installa le librerie di runtime di Apache. La prima riga è set -ee sta causando un errore; ciò che set -efare?

Risposte:


22

Questo built-in è così complicato che merita una sua sezione.

set consente di modificare i valori delle opzioni della shell e impostare i parametri posizionali o di visualizzare i nomi e i valori delle variabili della shell.

L' -eopzione

-e

Esci immediatamente se una pipeline (vedi Pipeline), che può consistere in un singolo comando semplice (vedi Comandi semplici), un comando subshell racchiuso tra parentesi (vedi Raggruppamento comandi) o uno dei comandi eseguiti come parte di un elenco comandi racchiuso da le parentesi graffe (vedere Raggruppamento comandi) restituiscono uno stato diverso da zero. La shell non si chiude se il comando che fallisce fa parte dell'elenco dei comandi immediatamente dopo un po 'o fino alla parola chiave, parte del test in un'istruzione if, parte di qualsiasi comando eseguito in un && o || list tranne il comando che segue l'ultimo && o ||, qualsiasi comando in una pipeline tranne l'ultimo, o se lo stato di ritorno del comando viene invertito con!. Una trap su ERR, se impostata, viene eseguita prima della chiusura della shell.

Questa opzione si applica all'ambiente shell e a ciascun ambiente subshell separatamente (consultare Ambiente di esecuzione comandi) e può causare la chiusura delle subshell prima di eseguire tutti i comandi nella subshell.

Fonte: www.gnu.org

Modificato grazie al commento di @ psusi di seguito.

Inoltre puoi leggere la pagina del manuale di bash

man bash 

alla sezione: SHELL BUILTIN COMMANDS

o problema

help set 

per un breve messaggio di aiuto.


1
Poiché si tratta di un comando incorporato, lo si desidera help sete il manuale completo di bash lo è info bash, se è installato bash-doc.
psusi,

Grazie per il chiarimento @psusi. help sete / o man bashsono quelli corretti per set.
NickTux,

12

set -e in breve, quando si trova nella parte superiore dello script bash, dice allo script di uscire non appena una riga dello script fallisce (con alcune eccezioni elencate nel manuale.) [1]

Come opzione di debug, viene spesso utilizzato con set -x, ovvero stampare ogni riga di comando espansa prima dell'esecuzione con un segno "+". [2]

Vedi di più su:

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

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


2
Grazie per una semplice spiegazione. Vedo spesso set -xe in Dockerfiles e ora conosco il motivo :)
ymakux,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.