D1782.test.sh (1014B)
1 #!/bin/bash 2 3 flag= 4 5 shopt -s extdebug 6 7 function set_exit { 8 return "$1" 9 } 10 function set_trap { 11 # DEBUG trap の中で trap や return を実行しても "現在のコマンド" は 12 # 必ず実行される。 13 # 14 # Note: 中で BASH_COMMAND を書き換えても実際に実行されるコマンドが変 15 # 化する訳ではない。(BASH_COMMAND="echo rewrite" として見たがやはり 16 # NOT_REACHED1 が表示される)。 17 # 18 # Note: 中で trap - DEBUG するかどうかは関係ない。 19 # 20 # Note: continue や return の前に指定した終了ステータスは DEBUG trap 21 # (extdebug) の振る舞いには関係ない。 22 # 23 #trap '[[ $flag == 1 ]] && { echo "cmd:$FUNCNAME/$BASH_COMMAND"; set_exit 2; return 2; }' DEBUG 24 25 trap '[[ $flag == 1 ]] && { echo "cmd:$FUNCNAME/$BASH_COMMAND"; shopt -s extdebug; set_exit 2; }' DEBUG 26 } 27 28 function f1 { 29 local flag= i= 30 for ((i=0;i<10;i++)); do 31 flag=1 32 set_trap 33 echo NOT_REACHED1 34 flag=0 35 echo NOT_REACHED2 36 done 37 } 38 f1 39