fc2ブログ

bashでgit comまでタイプしてタブキーを打つとcommitと補完される謎を追う

ひっそりぃはUbuntu Linux 13.04を使っているのですが、git commitしようとして、何気なくgit comまでタイプしCtrl-i(タブキー)を押すと、なんとcommitと補完され驚きました。

シェルはbashを使っているので、コマンド名やディレクトリ名が補完されるのは当然なのですが、コマンドの引数まで補完されるとは。

bashにこんな機能あったっけ?
と気になったので調べてみた。

調査にはプロセスのsystem callやsignalをtraceできるstraceコマンドを使います。全てのtraceを追うと大変そうなので、補完のためのデータベースを読みに行くのでは?とあたりをつけ、open()のみ追うことにします。

コマンドは、以下の様になります。

$ strace -e open bash


bashが起動する過程でのopen()結果がずらずらと表示され、以下の状態で止まりました。

: (省略)
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
open("/etc/bash_completion.d/zeitgeist-daemon", O_RDONLY|O_LARGEFILE) = 3
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
open("/home/hissorii/.bash_history", O_RDONLY|O_LARGEFILE) = 3
open("/home/hissorii/.bash_history", O_RDONLY|O_LARGEFILE) = 3
open("/lib/terminfo/s/screen", O_RDONLY|O_LARGEFILE) = 3
open("/etc/inputrc", O_RDONLY|O_LARGEFILE) = 3
hissorii@ubuntu:~$


ここで、キーボードにて「git com」までタイプし、おもむろにタブキーをたたくと、

続きを読む »

スポンサーサイト



 | HOME | 

プロフィール

ひっそりぃ

Author:ひっそりぃ
Twitter:@hissorii_com
GitHub:hissorii


月別アーカイブ


最新記事


カテゴリ



最新コメント


最新トラックバック




RSSリンクの表示


Amazon


QRコード

QRコード

Amazon


ブログランキング

ブログランキング【くつろぐ】
にほんブログ村 ゲームブログ×PlayNCBlogへ

メールフォーム

名前:
メール:
件名:
本文:


カウンタ