2010-01-25 15 views

Respuesta

131

He aquí un ejemplo del uso de la trampa:

#!/bin/bash 
set -e 
function cleanup { 
    echo "Removing /tmp/foo" 
    rm -r /tmp/foo 
} 
trap cleanup EXIT 
mkdir /tmp/foo 
asdffdsa #Fails 

Salida:

[email protected]:~ $ sh traptest 
t: line 9: asdffdsa: command not found 
Removing /tmp/foo 
[email protected]:~ $ 

en cuenta que a pesar de que la línea asdffdsa falló, la limpieza todavía fue ejecutado.

5

de la petición de set:

-e

Salir inmediatamente si una orden simple (véase la sección 3.2.1 Comandos simple) sale con un estado distinto de cero, a menos que el comando que falla es parte de un ciclo until o while, parte de un enunciado if, parte de un & & o || lista, o si el estado de retorno del comando se está invirtiendo usando! Se ejecuta una captura en ERR, si se establece, antes de que salga el shell.

(Énfasis en el mío).

9

Desde la página de manual (bash relativos a órdenes internas):

trampa [-lp] [[arg] nombre-señal ...]
El orden arg es para ser leído y ejecutado cuando el shell recibe la señal (s) sigspec.

Por lo tanto, como se indica en Anon.'s answer, llame trap temprano en la secuencia de comandos para configurar el controlador que desee en ERR.

+3

También puede interceptar en EXIT. –

+0

Ejecute 'help trap' para ver algo de ayuda en el built-in. – Flimm

6

aquí está un reference para usted en las señales de captura y set -e related. Echar un vistazo.

+0

Eso es exactamente lo que estaba buscando gracias. – nelaaro

Cuestiones relacionadas