D1349.debug-trace.sh (1789B)
1 #!/bin/bash 2 3 function check1 { 4 function f1 { 5 local i 6 for ((i=0;i<10;i++)); do 7 ((i==0)) && continue 8 ((i==1)) && break 9 done 10 return 1 11 } 12 function f2 { 13 echo f2:BEGIN 14 f1 15 echo f2:END 16 } 17 18 trap 'echo "\$ $BASH_COMMAND"' DEBUG 19 20 # trace 属性のない場合 21 f2 22 23 # 内側の関数のみ trace 属性のある場合 24 declare -ft f1 25 f2 26 27 # 外側・内側の関数に trace 属性の在る場合 28 declare -ft f1 f2 29 f2 30 } 31 32 echo ------------------------------------------------------------------------------ 33 echo check1 34 (check1) 35 36 function check2 { 37 function f1 { 38 echo '$ trap -p' 39 trap -p 40 echo '$ trap -p DEBUG' 41 trap -p DEBUG 42 } 43 44 trap 'echo "\$ $BASH_COMMAND"' DEBUG 45 echo '$ trap -p' 46 trap -p 47 echo '$ trap -p DEBUG' 48 trap -p DEBUG 49 f1 50 } 51 52 echo ------------------------------------------------------------------------------ 53 echo check2 54 (check2) 55 56 function check3 { 57 function f1 { 58 trap 'echo "[DEBUG]"' DEBUG 59 } 60 function f2 { 61 trap DEBUG 62 } 63 64 trap 'echo "\$ $BASH_COMMAND"' DEBUG 65 f2 66 f2 67 f1 68 f1 69 } 70 echo ------------------------------------------------------------------------------ 71 echo check3 72 (check3) 73 74 function check4 { 75 function f1 { 76 echo hello1 77 trap 'echo "\$ $BASH_COMMAND"' DEBUG 78 echo hello2 79 } 80 trap 'echo "\$ $BASH_COMMAND"' DEBUG 81 f1 82 } 83 echo ------------------------------------------------------------------------------ 84 echo check4 85 (check4) 86 87 echo ------------------------------------------------------------------------------ 88 function check5 { 89 function trap-debug { 90 echo "alpha:$BASH_COMMAND" 91 trap 'echo "DEBUG:DEBUG $BASH_COMMAND"' DEBUG 92 trap -p DEBUG 93 echo "beta:$BASH_COMMAND" 94 } 95 trap 'echo A; trap-debug; echo Z' DEBUG 96 echo gamma 97 } 98 echo check5 99 (check5)