-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinclude
More file actions
77 lines (69 loc) · 2.34 KB
/
include
File metadata and controls
77 lines (69 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/sh
# oxr 2025
# Gestiona la inclusion de codigo a un script o al shell. Las ventajas de usarlo
# en vez de '. archivo' directamente, es que controla que archivos han sido
# incluidos, ya por otro archivo previamente incluido o por el brutal caso de que
# dos archivos se incluyan mutuamente; evitando asi la recursion de inclusiones
# en el primer caso, mas un bucle infinito en el segundo. Todo esto vale para
# inclusion en bash, menos controlar las inclusiones mutuas.
#
# Desde linea de comandos de 'bash':
#
# \\r . include [-l] script_1 [script_2 ...] # la prinera vez, luego sin '. '
#
# '-l' Para ver informacion del proceso de inclusion
#
# En script 'sh':
#
# \\r [ $include_ctl || ] . include ; include script_1 [script_2 ...]
#
# Lo de '$include_ctl' es para ahorrar procesamiento,
#
[ $include_ctl ] && {
# $include_l || include_log "47;95" REP "$include_o($include_p)\t$include_i"
return
} || {
# $include_l || include_log "44;97" FOR "$include_o($include_p)\t$include_i"
include_ctl=true
include_c=1
# [ "$1" = "-l" ] && [ "${0##*/}" = "bash" -o "${0##*/}" = "include" ] && { include_l=false ; shift ;} || include_l=true # false es true
# include_o=${0##*/} include_i="$@" ; read include_p < /proc/$$/comm
. tipo
}
include_log(){
local x="" y=""
[ ${#BASH} -eq 0 ] || local include_e="-e"
[ ${#3} -eq 0 ] && y=$include_i || x=$include_c
echo $include_e $x '\e[5G\e[1;'$1'm'"$2 $include_v"'\e[0m\e[20G'$y$3
}
include(){
local include_v="" include_p="" include_o=${0##*/} include_i="$@" include_t=""
[ $# -ne 0 ] || {
# [ "$include_o" = "include" ] || [ "$include_o" = "sh" ] &&
{ infsh ~/code/include 3 20 ; return ;}
}
[ $1 != "-l" ] || { include_l=false ; shift ;}
read include_p < /proc/$$/comm
$include_l || include_log 96 SET
[ $# -ne 0 ] || return
for include_v in $@ ; do
tipo $include_v ; include_t=$?
[ $include_t -eq 0 ] && { # Incluido
$include_l || include_log 93 FUN
} || { # No incluido
[ $include_o = $include_v -o $include_t = 5 ] && { # a si mismo|no existe
$include_l || include_log "47;91" NOT
} || { # incluir
. ~/code/$include_v ;
$include_l || include_log 92 INC -
include_c=$((include_c+1))
[ $include_c -lt 100 ] || { read -p "INCLUDE>Loco - Se saldra del shell" r ; exit ;}
}
}
done
}
case ${0##*/} in
bash|sh|include) include $@ ;;
*) $include_l || include_log "44;94" COMM ${0##*/} ;;
esac
#