2012-11-04 22 views
5

L'esecuzione del seguente frammento:come può un file di origine ereditare trap DEBUG?

#!/bin/bash 

function preexec() 
{ 
    echo -e "\n-->preexec command: $BASH_COMMAND" 
} 
trap 'preexec' DEBUG 

function testfunc() 
{ 
    echo "testfunc called $1" 
} 

testfunc "main" 
source "source.sh" 

exit 0 


dove source.sh è

#!/bin/bash 

testfunc "source" 


dà:

-->preexec command: testfunc "main" 
testfunc called main 

-->preexec command: source "source.sh" 
testfunc called source 

-->preexec command: exit 0 


il che significa che ogni comandi all'interno del file di origine sono n ot intrappolato dalla trappola DEBUG.
Infatti se aggiungo la linea

trap 'preexec' DEBUG 

all'interno source.sh come seconda linea, tutto funziona come voleva (i comandi all'interno di file di origine sono intrappolati troppo).

Come posso rendere questo un comportamento predefinito al fine di evitare di ripetere la riga sopra per qualsiasi file ho bisogno di origine? In altre parole: c'è qualche possibilità di dire al file di origine di ereditare la trappola di DEBUG?

risposta

6

ho risolto impostazione nel file principale:

set -o functrace 


Da BASH uomo:

Se impostato, trappole di DEBUG e RETURN sono ereditati da Shell funzioni, sostituzioni di comando, e comandi eseguiti in un ambiente sottomarino . I trap DEBUG e RETURN non sono normalmente ereditati in tali casi.

Essendo 'source' una funzione di shell, essi vengono ereditate.

Problemi correlati