2012-11-04 13 views
5

Running następujący fragment:w jaki sposób plik źródłowy może odziedziczyć pułapkę 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 


gdzie source.sh jest

#!/bin/bash 

testfunc "source" 


daje:

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

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

-->preexec command: exit 0 


co oznacza, że ​​każdy polecenia wewnątrz pliku pochodzących są n ot uwięziony przez pułapkę DEBUG.
W rzeczywistości, jeśli mogę dodać linię

trap 'preexec' DEBUG 

wewnątrz source.sh jako drugą linię, wszystko działa jak chciał (polecenia wewnątrz pliku źródłowego są uwięzione też).
Jak mogę ustawić to zachowanie domyślne, aby uniknąć powtarzania powyższego wiersza dla dowolnego pliku, który muszę pobrać? Innymi słowy: czy jest jakaś szansa, aby powiedzieć plikowi źródłowemu o odziedziczeniu pułapki DEBUG?

Odpowiedz

6

Rozwiązałem ustawienia w głównym pliku:

set -o functrace 


Od BASH człowieka:

Jeśli zestaw wszelkie pułapki na DEBUG i powrotu są dziedziczone przez Shell funkcji, podstawienia polecenia, i polecenia wykonywane w środowisku podpowłokowym . Pułapki DEBUG i RETURN zwykle nie są dziedziczone w takich przypadkach.

Będąc "źródło" funkcja powłoki, są one dziedziczone.

Powiązane problemy