私.zshrc
は私が次を持っていると仮定します。
alias ls='ls --color=auto'
alias ll='ls -halF'
予想通りに合計whence ls
が返されますls --color=auto
。whence ll
ls -halF
オプション(help whence
ヘルプには何もありません)または<rwhence> ll
生成できる行はls --color=auto -halF
ありますか?
ベストアンサー1
まず、通常の構成で使用するときにエイリアスが実際に繰り返されることを確認しました。
% PS1='%% ' zsh -f
% alias echo='echo foo'
% echo mlatu
foo mlatu
% alias xxxx='echo bar'
% xxxx gerku
foo bar gerku
%
もちろん。whence
inオプションを調べたところ、zshall(1)
再帰を実行するためのオプションが表示されなかったので、何かを書いてみましょう。
function rwhence {
local def
local -a alias
def=$(builtin whence -v $1)
print $def
if [[ $def == *'is an alias for'* ]]; then
# simplification: assume global aliases do not exist
alias=( ${(z)def##*is an alias for } )
# loop detection only at the immediate level
if [[ $alias[1] != $1 ]]; then
rwhence $alias[1]
fi
fi
}
デフォルトでは、出力を解析してwhence -v
エイリアス定義を探し、そうであれば最初のコマンドワードを取得するか、既に見ているものでない場合は繰り返します。私はまったく使用していないグローバルエイリアスのサポートがより複雑です。
% rwhence xxxx
xxxx is an alias for echo bar
echo is an alias for echo foo
% rwhence echo
echo is an alias for echo foo
% rwhence cat
cat is /bin/cat
% rwhence mlatu
mlatu not found
%