-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtb
More file actions
56 lines (49 loc) · 1.5 KB
/
Copy pathtb
File metadata and controls
56 lines (49 loc) · 1.5 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
#!/bin/sh
# oxr 2025
# Captura la salida standard o lee de archivo. Muestra, ejecuta, o entrega cada
# linea a un script o comando. Pensado para scripts, y comandos que no leen de
# la salida standard.
#
# \\r (|) tb [-n] (-a archivo) [-c|comando]
#
# '-a' archivo del que leer las lineas
# '-n' no 'echo' tras cada linea
# '-c' ejecuta las lineas como ordenes
#
# (1) si el archivo tiene una sola linea, sin salto de linea; read lee la linea
# y sale del bucle sin ejecutar su contenido.
# (2) Intento infructuoso de que respete los espacios/tabs al principio de la 1º linea
# (3) si se añade tambien comando o algo inesperado dara resultados imprevisibles
tb(){
[ $# -gt 0 ] || { infsh $code/tb 3 11 ; return ;}
local l="" a="" n=false
while : ; do case "$1" in # OPCIONES
(-n) shift ; n=true ;;
(-a) a="$2" ; shift 2 ; [ -e "$a" ] || { echo "tb: No existe el archivo '$a'" ; return ;} ;;
(-c) shift ; n=true ; set -- $@ eval ;; # (3)
(""|--) set -- echo ; break ;; # (2) [ ${#BASH} -eq 0 ] && echo -n '\r' || echo -e -n '\r'
(*) [ -e "$1" ] && {
[ -d "$1" ] || a="$1" ; shift ;
} || {
tipo "$1" ; [ $? -lt 5 ] && { set -- "$@" ; break ;} || {
[ ${#a} -eq 0 ] && {
echo "tb: archivo o comando '$1' no exite" ; return;
} || break ;
}
} ;;
esac ; done
[ ${#a} -eq 0 ] && { # lee de tuberia
while read l ; do
"$@" "$l"
$n || echo
done
} || { # lee de archivo
while read l ; do
"$@" "$l"
# $n || echo
done < "$a"
}
[ ! "$l" ] || "$@" "$l" #(1)
}
[ ${0##*/} != tb ] || tb "$@"
#