Ubuntu 7.04でcommand-not-foundが便利
Ubuntu Linux 7.04にしてみましたシリーズ。
驚いたのが、bash のコマンドラインで、インストールしていないプログラムを実行しようとしたら、候補のパッケージまで表示されたこと。こりゃ便利だ。
$ traceroute プログラム 'traceroute' は以下のパッケージで見つかりました: * traceroute-nanog * traceroute 次の操作を試してください: sudo apt-get install <選択したパッケージ> bash: traceroute: command not found
調べてみると、/etc/bash.bashrc で command_not_found_handle という関数を定義している。
if [ -x /usr/bin/command-not-found ]; then
function command_not_found_handle {
/usr/bin/command-not-found $1
return $?
}
fi
man bashしてみたところ、command_not_found_handleは、コマンドが見つからないときに実行される関数だとか。へー、知らなかった。
/usr/bin/command-not-foundはcommand-not-foundパッケージに含まれるようだ。
$ dpkg -S /usr/bin/command-not-found command-not-found: /usr/bin/command-not-found
実体はPythonのスクリプト。
$ file /usr/bin/command-not-found /usr/bin/command-not-found: python script text executable
中を見ると、実際の処理はCommandNotFoundパッケージを呼んでいる。
/usr/share/doc/command-not-found/READMEを見たら、解説サイトが紹介されていた。
どうやら、/usr/share/command-not-foundの下にあるデータベースを呼んでいるらしい。で、これらはいまの実装では、特にaptとかの連携とかはなくて、固定的なデータのように見える。なるほど。
コメント
コメントの投稿
トラックバック
http://emasaka.blog65.fc2.com/tb.php/223-697a27e4
[Ubuntu][Linux][command-not-found][現実逃避]こんな機能があるんだ。
使い始めて気がついた。未インストールのコマンドを叩くとインストールすべきパッケージを教えてくれる。どうやってこの機能を実現しているのか分からなかったのでbashにstraceしてみた。 本を読む Ubuntu 7.04でcommand-not-foundが便利 まったく同じ疑問を持った人がいた
