sistema_progs

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

D1349.trap-return.sh (1361B)


      1 #!/bin/bash
      2 
      3 (
      4   trap 'echo "RETURN:$BASH_COMMAND:[$FUNCNAME]"' RETURN
      5   function f1 {
      6     echo A
      7   }
      8   function f2 {
      9     echo B
     10     return 0
     11   }
     12   f1; f2
     13 
     14   set -T
     15   f1; f2
     16   set +T
     17 
     18   declare -ft f1 f2
     19   f1; f2
     20 )
     21 
     22 echo ------------------------------------------------------------------------------
     23 (
     24   function ret { local count=0; return 1; }
     25   trap 'echo RETURN:$BASH_COMMAND; [[ $FUNCNAME == ret ]] && ((count++==0)) && return 2' RETURN
     26   function f1 {
     27     ret
     28     echo "exit=$?"
     29   }
     30   set -T
     31   f1
     32 )
     33 
     34 echo ------------------------------------------------------------------------------
     35 # continue/break の引数
     36 # 実際に抜けられるループ数よりも大きな数を指定すると全てのループを抜ける。
     37 # 呼び出し元の関数にあるループを抜けるという事はない。
     38 
     39 function f1 {
     40   local i
     41   for i in {0..2}; do
     42     echo "f1#$i:BEGIN"
     43     f2
     44     echo "f1#$i:END"
     45   done
     46 }
     47 
     48 function f2 {
     49   local i
     50   for i in {0..2}; do
     51     echo "f2#$i:BEGIN"
     52     break 2
     53     #continue 2
     54     echo "f2#$i:END"
     55   done
     56 }
     57 
     58 f1
     59 
     60 echo ------------------------------------------------------------------------------
     61 echo 'RETURN in trap'
     62 
     63 (
     64   set -T
     65   function f1 {
     66     return 123
     67   }
     68   function handler {
     69     echo handler
     70     trap 'echo return Handler' RETURN
     71     f1
     72     return 321
     73   }
     74 
     75   trap handler RETURN
     76   f1
     77 
     78   trap handler DEBUG
     79   f1
     80 )