2016-05-28 4 views
2

同じ名前を使用していますzshの機能から、組み込み関数を呼び出します。 私はcdを呼び出すとき、それは直接変更して、ディレクトリの内容を一覧表示することをしたいと思います。ZSH:私はzshのを使用して、わずかに内蔵<code>cd</code>機能を拡張したいと思います

function cd() { 
    cd $1 
    ls . 
} 

私が動作するように、このコードを期待しているだろうが、それは結局のところ、cdへの呼び出しは無限ループになり、関数の定義を参照。

は回避策この問題を解決するには、離れて私の機能に別の名前を選択するから、ありますか?不思議なこと

UPDATE

が、これは

function cd() { 
    `echo $1` 
    ls . 
} 

理由は考え

を働きました。あなたはおそらく上 autocdオプションを持っているので、

答えて

3

同じ名前の関数内から組み込みコマンドを使用するか、またはどこか他のそのことについては、するためには、あなたがbuiltin PRECOMMAND修飾子を使用することができます

function cd() { 
    builtin cd $1 
    ls . 
} 

builtin COMMANDをして組み込みを使用することがzshのを伝えます同じ名前のエイリアス、ファンクション、または外部コマンドの代わりにCOMMANDという名前を使用します。このような組み込み関数が存在しない場合は、エラーメッセージが出力されます。あなたの代わりにエイリアスの外部コマンドを使用したい場合のために


、組み込みまたは同じ名前の関数は、command PRECOMMAND修飾子を使用することができます。たとえば:

command echo foobar 

は、これは(ほとんどの場合/bin/echo)の代わりにのzshの組み込みechoのバイナリechoを使用します。機能builtincommandとは異なり


通常の再帰を防止するための別名を持つ必要はありません。エイリアス定義でエイリアスを使用することは可能ですが、

% alias xx="echo x:" 
% alias yy="xx y:" 
% yy foobar 
y: x: foobar 

各エイリアス名は1回だけ展開されます。 2番目の場合、エイリアスは展開されず、関数、組み込みコマンドまたは外部コマンドが使用されます。あなたは、特に組み込みまたは外部コマンドを使用したい場合はもちろん

% alias echo="echo echo:" 
% echo foobar 
echo: foobar 
% alias xx="yy x:" 
% alias yy="xx y:" 
% xx foobar 
zsh: command not found: xx 

、あなたはまだあなたが別のエイリアスの使用を防止したい場合は、別名でbuiltinまたはcommandを使用するか、またはすることができます。例えば、このバイナリecho

alias echo="command echo" 

代わりに組み込みのに使用されます。

2

なぜechoコマンドの作品があります。これを確認するには、setoptと入力してオプションのリストを取得します。その後

ディレクトリ名のエコー-INGと出力を引くにはautocdをトリガし、そのディレクトリに行ってきました。

関連する問題