zsh で PATH
から which
コマンドや type
コマンドで実行ファイルを検索するように fpath
から autoload
される関数の実体を探したいことがあります。 そういうときは ${^fpath}/cdr(N)
のように書けば検索できます。
解説
まず setopt
の RC_EXPAND_PARAM
が設定されていないときには $fpath/cdr
で配列の最後だけに /cdr
がつくので、 ${^spec}
を使ってすべてにつけるようにしています。
最後に (N)
で存在するものだけ残すようにしています。
実行例:
% echo ${^fpath}/cdr(N)
/usr/share/zsh/5.0.2/functions/cdr
PATH で後ろに隠れているコマンドも探す
rbenv
を使っていると PATH
の後ろに /usr/bin/ruby
が隠されるなど、 同じコマンドが PATH
に複数存在することがあります。
そういうときに zsh なら ${^path}/ruby(N)
で隠れているコマンドも含めて展開できます。
実行例:
% echo ${^path}/ruby(N)
/Users/kazu/.rbenv/shims/ruby /usr/bin/ruby
zsh スクリプトでコマンドの存在を調べる
シェルスクリプトの中で、 外部コマンドが実行できるかどうか調べるのに
type peco >/dev/null 2>&1
のように type
コマンドで調べることがありますが、 zsh なら
(( ${+commands[peco]} ))
のように commands
という連想配列を調べるという方法が使えます。
Disqus Comments