
Tengo 2 pequeñas funciones para abreviar set -x
/ set +x
, a saber:
sx () {
export PS4='+ [${BASH_SOURCE##*/}:${LINENO}]'
set -x
}
y
sz () {
set +x
export PS4=
}
Estas 2 funciones están en un archivo functons.sh
que esfuented desde ~/.bashrc
y visible en líneaaquí.
Inmediatamente después de iniciar sesión en una nueva sesión de bash, trato de averiguar dónde sz()
está la función de esta manera:
$ shopt -s extdebug; declare -F sz; shopt -u extdebug
sz 25 /Users/jab/src/git/hub/jab/src/bash/keyboard/z.sh
Esto muestra que bash
piensa que la sz()
función está declarada en z.sh
, pero en esa línea hay una función diferente, zzz()
en líneaaquí.
El resultado de la sx()
función (y de todas mis otras funciones) es correcto
$ shopt -s extdebug; declare -F sx; shopt -u extdebug
sx 428 /Users/jab/src/git/hub/jab3/src/bash/functons.sh
¿Por qué el declare -F
comando obtiene un resultado incorrecto para la sz
función?
Respuesta1
También tiene un alias functons.sh
con el mismo nombre que una función en su otro archivo.
En functons.sh
:
alias zzz=sz
En z.sh
:
zzz () {
df -h
}
Esto confunde bash
.
Ejemplo:
$ cat f1
foo () { echo hello; }
alias xfoo=foo
$ cat f2
xfoo () { echo beep; }
$ source f1
$ source f2
$ shopt -s extdebug
$ declare -F foo
foo 1 f2
Sin el xfoo
alias en f1
:
$ source f1
$ source f2
$ shopt -s extdebug
$ declare -F foo
foo 1 f1
El bash
manual también incluye el texto.
Los alias son confusos en algunos usos.
bajo el título "ERRORES".