set -x
/を短くしたい2つの小さな関数がありますset +x
。
sx () {
export PS4='+ [${BASH_SOURCE##*/}:${LINENO}]'
set -x
}
そして
sz () {
set +x
export PS4=
}
これら2つの機能は1つのファイルにあります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」というタイトルの下にあります。