fishでも似たようなの書いたんですけど、仕事場がbashなのでどんどん改造されてfish以上のコマンドになってしまいました。
それをちょっとずつでも書こうかなって。
bashで一番使うコマンドはcd
コマンドだと思います。
デフォルトのcd
コマンドは結構かゆい所に手が届いてくれなくて不便です。
※移動する機能単であることに意味があるので変わってほしいわけではないです。
こういうとき、Linuxユーザーは自分で改造しちゃうので私もスクリプトを書いてcd
コマンドを便利にしてみました。
(うーん、enhancd使えばよくね?w使ったことないけど(´・_・`))
環境は、ubuntu16.04です。
Macさんというか、BSD環境では若干コマンドのオプションに違いがあったりするので動かないと思います。
そこら辺はMacにgnuコマンド入れるとかで乗り切ってください。
TL;DR;
僕のbash設定は、もう改造に改造を重ねてこんな簡単なbashではなくなりました。
気になる人は読んで見てください。
気が向いたら解説記事でも書きます。
第1羽「ひと目で尋常でない不便さだと見抜いたよ」
初めてcdコマンドを触ったときに思ったのは
Windowsならフォルダをダブルクリックしたら移動して中身まで見えるのに、Linuxとかいう奴はそれすらもできんのか。使えない奴め
でした。
そこで、ディレクトリを移動したら移動先の中身が見えるようにしてみます。
こんな感じの動きですね。
function custom_cd()
{
\cd $@ && clear && ls
}
alias cd='custom_cd'
cdして成功したら画面をclearしてlsするだけです。
cdに失敗したら何もしてほしくないので、cdを先頭にしています。
ただ&&演算で繋いだだけなので特に難しくはないと思いますが、関数内のcdにバックスラッシュを付けることがポイントです。
これ、最終的にはcdコマンドをaliasしてるわけですけど、custom_cd関数の中で普通にcd && clear & ls
しちゃうとコマンド実行してからターミナルのコントロールが返ってこなくなります。
- cdコマンドを打つ
- cdコマンドの代わりにcustom_cd()が呼び出される
- custom_cd()内でcdコマンドが実行される
- cdコマンドの代わりにcustom_cd()が呼び出される
- 以下、無限再帰
みたいになってるんじゃないですかね。
知らんけど(´・_・`)
とにかく、コントロールが返ってこないと困ってしまうわけです。
そこでちゃんと元々のcdコマンドを呼び出すために「ビルトインコマンド」を指定してあげる必要があります。
あ、lsコマンドはaliasした奴を使ってほしいので、ビルトインコマンドにはしていません。
まとめ
既存のコマンドをそのままの名前でaliasするときは、ビルトインコマンドを使ってあげるといいでしょー
では、また次回。
多分、こういうタイトルは続かないと思います。
あと、間違ってたら教えてください。
続編書きました
ご注文はHOMEに帰らないcdですか?