set -x
/ 를 축약하고 싶은 두 개의 작은 함수가 있습니다 set +x
.
sx () {
export PS4='+ [${BASH_SOURCE##*/}:${LINENO}]'
set -x
}
그리고
sz () {
set +x
export PS4=
}
이 두 가지 기능은 하나의 파일에 있습니다 functons.sh
.원천d는 에서 왔고 ~/.bashrc
온라인에 표시됩니다.여기.
sz()
새로운 bash 세션에 로그인한 후 즉시 다음과 같이 함수가 어디에 있는지 알아내려고 했습니다 .
$ 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"라는 제목 아래에 있습니다.