ZshでChange DirectoryしたときにList Segmentsする
Zshでcdしたときにlsされると便利かな~って思って適当に実装してみた。
手っ取り早く考えたのがこれ
alias cd="cd $1 ls"
まあコレはちゃんと動かないんですけどね。
エイリアスは引数を取れないので、問答無用でホームディレクトリ帰され、lsに引数が渡されたことになります。
$ cd hoge/
これが
$ cd && ls hoge/
こうなる(┐「ε:)ズコー====
次に考えたのがこれ
alias cd="cdls" function cdls() { cd $1 && ls }
いけそうな気がする・・
cdls:1: maximum nested function level reached
が……駄目っ……!
コレはcdのエイリアスが有効であるため、再帰的にcdが呼ばれ続けてエラーを吐いている。
と言う訳でbuiltinを使いましょう。
builtinはユーザ実装の関数やエイリアスよりシェル・コマンドを優先的に実行するためのコマンドです。
alias cd="cdls" function cdls() { builtin cd $1 && ls }
これでエイリアスのcdではなく、シェル・コマンドのcdが呼ばれるようになります。
akata:^_^[~]$ cd hoge bar foo hoge huga akata:^_^[~/hoge]$
(∩´∀`)∩ワーイいけました。
ちなみにこれだとlsコマンドの方はエイリアスが有効になっているので、
既存のエイリアスを使い回せます。
後、確認していませんが多分Bashでもちゃんと動くと思います(タブンネ..)
参考URL
Linuxコマンド集 - 【 builtin 】 シェル・コマンドを優先して実行する:ITpro
ここに知りたいことは全部書いていました。