sistema_progs

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

D1772.bashrc (5696B)


      1 #! bash config
      2 
      3 shopt -s extglob
      4 #opts=builtin-elapsed
      5 #opts=no-timer
      6 
      7 #type=none
      8 type=initial
      9 #type=initial-prompt
     10 #type=final
     11 #type=final-prompt
     12 
     13 #type=check-DEBUG-behavior
     14 #type=unset-self-func
     15 #type=check-bashbug-tmpenv
     16 #type=check-unset-trap-DEBUG
     17 
     18 #set -T
     19 
     20 if [[ $type == initial ]]; then
     21   source out/ble.sh --attach=none
     22 elif [[ $type == initial-prompt ]]; then
     23   source out/ble.sh
     24 fi
     25 
     26 if [[ ${BLE_VERSION-} && :$opts: == *:builtin-elapsed:* ]]; then
     27   ble-import contrib/prompt-elapsed
     28   _ps1_time='\q{contrib/elapsed}'
     29 elif [[ :$opts: != *:no-timer:* ]]; then
     30   function timer_start {
     31 #echo $FUNCNAME >/dev/tty
     32     timer=${timer:-$SECONDS}
     33   }
     34 
     35   function timer_stop {
     36 #echo $FUNCNAME >/dev/tty
     37     timer_show=$(($SECONDS - $timer))
     38     #timer_show=$(($SECONDS - timer))
     39     unset timer
     40   }
     41 
     42   trap 'timer_start "$BASH_COMMAND"' DEBUG
     43 
     44   if [ "$PROMPT_COMMAND" == "" ]; then
     45     PROMPT_COMMAND="timer_stop"
     46   else
     47     PROMPT_COMMAND="$PROMPT_COMMAND; timer_stop"
     48   fi
     49 
     50   _ps1_time='${timer_show}s'
     51 fi
     52 
     53 case $type in
     54 (check-DEBUG-behavior)
     55   echo "direct:1"
     56   builtin trap -p DEBUG
     57   echo "direct:2"
     58 
     59   # Q サブシェルの中でも DEBUG trap の定義を参照できるか?
     60   # A 参照できる。
     61   echo "subshell:1"
     62   echo "[$(builtin trap -p DEBUG)]"
     63   echo "subshell:2"
     64 
     65   # Q 関数の中でも DEBUG trap の定義を参照できるか?
     66   # A 参照できない。-t を付加していれば見られる。
     67   function inside-function {
     68     echo "$FUNCNAME:1"
     69     builtin trap -p DEBUG
     70     echo "$FUNCNAME:2"
     71   } >/dev/tty
     72   declare -ft inside-function
     73   inside-function
     74 
     75   # Q 関数内サブシェルでも DEBUG trap の定義を参照できるか?
     76   # A できない。-t を付加していれば見られる。
     77   function inside-func-subshell {
     78     echo "$FUNCNAME[$(builtin trap -p DEBUG)]"
     79   } >/dev/tty
     80   declare -ft inside-func-subshell
     81   inside-func-subshell
     82 
     83   # Q 関数内 eval でも DEBUG trap の定義を参照できるか?
     84   # A できない。-t を付加していれば見られる。
     85   function inside-func-eval {
     86     echo "$FUNCNAME:1"
     87     eval 'builtin trap -p DEBUG'
     88     echo "$FUNCNAME:2"
     89   } >/dev/tty
     90   declare -ft inside-func-eval
     91   inside-func-eval
     92 
     93   # Q 関数の更に内側の関数で DEBUG trap の定義を参照できるか?
     94   # A できない。外側と内側の両方に -t を指定して初めて見られる。
     95   function inside-func-nest/1 {
     96     builtin trap -p DEBUG
     97   }
     98   function inside-func-nest {
     99     echo "$FUNCNAME:1"
    100     inside-func-nest/1
    101     echo "$FUNCNAME:2"
    102   } >/dev/tty
    103   declare -ft inside-func-nest/1
    104   declare -ft inside-func-nest
    105   inside-func-nest
    106 
    107   # Q 関数の中でリダイレクトした時に DEBUG trap の定義を参照できるか。
    108   # A できない。-t を付加していれば見られる。
    109   function inside-func-redir {
    110     builtin trap -p DEBUG > a.tmp
    111     echo "$FUNCNAME[$(<a.tmp)]"
    112   } >/dev/tty
    113   declare -ft inside-func-redir
    114   inside-func-redir
    115 
    116   # Q 内側の関数から呼び出された後で外側の関数に対して -t 属性を付加して参照できる様になるだろうか。
    117   # A ならない。
    118   function nest-afterward-trace/1 {
    119     declare -ft "${FUNCNAME[1]}"
    120     builtin trap -p DEBUG
    121   }
    122   function nest-afterward-trace {
    123     echo "$FUNCNAME:1"
    124     nest-afterward-trace/1
    125     echo "$FUNCNAME:2"
    126   }
    127   declare -ft nest-afterward-trace/1
    128   nest-afterward-trace
    129 
    130   # Q 内側の関数で set -o functrace を設定して見られる様になるだろうか。
    131   # A ならない。
    132   function nest-afterward-functrace/1 {
    133     set -o functrace
    134     builtin trap -p DEBUG
    135     set +o functrace
    136   }
    137   function nest-afterward-functrace {
    138     echo "$FUNCNAME:1"
    139     nest-afterward-functrace/1
    140     echo "$FUNCNAME:2"
    141   }
    142   nest-afterward-functrace
    143 
    144   # Q source xxx の中から DEBUG trap は見えるだろうか。
    145   # A 見えない。但し set -T (-o functrace) が設定されていれば見える。
    146   #set -T
    147   {
    148     echo echo inside-source:1
    149     echo builtin trap -p DEBUG
    150     echo echo inside-source:2
    151   } >| a.tmp
    152   source ./a.tmp
    153 
    154   exit ;;
    155 
    156 (unset-self-func)
    157   function test-unset-self-function {
    158     unset -f "$FUNCNAME"
    159     echo hello
    160     echo world
    161   }
    162   test-unset-self-function
    163 
    164   if declare -f test-unset-self-function; then
    165     echo $'test-unset-self-function: \e[1;31mfound\e[m (unexpected)'
    166   else
    167     echo $'test-unset-self-function: \e[1;32mnot found\e[m (expected)'
    168   fi
    169 
    170   exit ;;
    171 
    172 (check-bashbug-tmpenv)
    173   set +T
    174 
    175   function hello {
    176     echo "result1:$a"
    177     echo "result2:$a"
    178   }
    179   a=value hello
    180   a=value eval hello
    181   a=value builtin eval hello
    182 
    183   function print { echo "v=${v:-(not found)}"; }
    184   function trapdebug { echo "$FUNCNAME:1:v=($v)"; }
    185   builtin trap 'trapdebug' DEBUG
    186   v=xxxx builtin eval 'echo v=${v:-(not found)}'
    187   v=xxxx eval 'echo v=${v:-(not found)}'
    188   echo "[print with debugtrap]"
    189   v=xxxx print
    190   v=xxxx eval print
    191   v=xxxx builtin eval print
    192 
    193   exit ;;
    194 
    195 (check-unset-trap-DEBUG)
    196   # Q trace 属性のついた関数内から DEBUG trap を削除する事は可能か?
    197   # A 削除できる。
    198   function unset-trap {
    199     builtin trap - DEBUG
    200   }
    201   declare -ft unset-trap
    202 
    203   echo check-unset-trap-DEBUG:1
    204   builtin trap -p DEBUG
    205   echo check-unset-trap-DEBUG:2
    206   unset-trap
    207   echo check-unset-trap-DEBUG:3
    208   builtin trap -p DEBUG
    209   echo check-unset-trap-DEBUG:4
    210 
    211   exit ;;
    212 esac
    213 
    214 if [[ $type == final ]]; then
    215   source out/ble.sh --attach=none
    216 elif [[ $type == final-prompt ]]; then
    217   source out/ble.sh
    218 fi
    219 PS1='[last: '$_ps1_time'][\w]$ '
    220 
    221 if [[ ${BLE_VERSION-} && $type == @(final|initial) ]]; then
    222   ble-attach
    223   # { echo A
    224   #   builtin trap -p DEBUG
    225   #   echo B
    226   #   trap -p DEBUG 
    227   #   echo C
    228   # } >/dev/tty
    229 fi