sistema_progs

Programas para customizar o meu entorno de traballo nos meus equipos persoais
Log | Files | Refs

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