本を読む

読書やコンピュータなどに関するメモ

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が便利 まったく同じ疑問を持った人がいた

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad