
set -x
/ 를 축약하는 2개의 작은 함수가 있습니다. set +x
즉:
sx () {
export PS4='+ [${BASH_SOURCE##*/}:${LINENO}]'
set -x
}
그리고
sz () {
set +x
export PS4=
}
functons.sh
이 두 가지 기능은 다음 파일에 있습니다 .원천d 의 ~/.bashrc
, 온라인에서 볼 수 있음여기.
새 bash 세션에 로그인한 후 즉시 함수가 다음과 같은 위치를 찾으려고 합니다 sz()
.
$ shopt -s extdebug; declare -F sz; shopt -u extdebug
sz 25 /Users/jab/src/git/hub/jab/src/bash/keyboard/z.sh
이는 함수가 에 선언되어 있다고 bash
생각 하지만 해당 줄에는 온라인이라는 다른 함수가 있음을 보여줍니다.sz()
z.sh
zzz()
여기.
sx()
함수(및 기타 모든 함수) 의 결과 가 정확합니다.
$ shopt -s extdebug; declare -F sx; shopt -u extdebug
sx 428 /Users/jab/src/git/hub/jab3/src/bash/functons.sh
declare -F
명령이 함수에 대해 잘못된 결과를 얻는 이유는 무엇입니까 sz
?
답변1
functons.sh
또한 다른 파일의 함수와 동일한 이름을 가진 별칭이 있습니다 .
안에 functons.sh
:
alias zzz=sz
안에 z.sh
:
zzz () {
df -h
}
이것은 혼란스럽다 bash
.
예:
$ 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
별칭이 없는 xfoo
경우 f1
:
$ source f1
$ source f2
$ shopt -s extdebug
$ declare -F foo
foo 1 f1
설명서 bash
에는 텍스트도 포함되어 있습니다.
별칭은 일부 용도에서 혼란을 줍니다.
"BUGS" 제목 아래에 있습니다.