Hatena::ブログ(Diary)

備忘録 beta

2009-03-21

zshでコマンドがインストールされていない時の反応をbash風に@Ubuntu

Ubuntu(7.04以降)でコマンドがインストールされていない時に出てくるメッセージ

$ rpm
プログラム 'rpm' はまだインストールされていません。  次のように入力することでインストールできます:
sudo apt-get install rpm
bash: rpm: command not found

bashの特殊関数機能で,コマンドが見つからなかった時に [command_not_found_handle] と言う関数が呼ばれる.(debian独自のbash拡張らしい...後に正式にbashの機能となったとか?)

Ubuntuでは [/etc/bash.bashrc] に実装してあるので参照.

zshにもいろいろな特殊関数があるが,コマンドが見つからない時に呼ばれる関数はない.


zshではprecmd(プロンプト表示前に呼び出される関数)とpreexec(コマンド実行前に呼び出される関数)という2つの特殊関数を用いてこれを実装してある.

zshインストールしたら [/etc/zsh_command_not_found]があると思うのでこれを読み込むだけ.

source /etc/zsh_command_not_found

ただし,当然precmdとpreexecを自前で定義してる場合は上書きされる.

その場合は内容をコピーして付け加えるのが早い.


読み込み前

$ rpm
zsh: command not found: rpm

読み込み後

$ rpm
zsh: command not found: rpm
プログラム 'rpm' はまだインストールされていません。  次のように入力することでインストールできます:
sudo apt-get install rpm

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/yuta84q/20090321/1237629722