« 黄金の扉を開ける賢者の海外投資術 | トップページ | LINUXデスクトップHACKS »

2008年4月 5日 (土)

bashの改造

bashを改造して、入力コマンドのログを記録するようにしてみる。入力したコマンドを知るためにはlastcommとかあるけど、イマイチな感じなので。。。と思って、とりあえず、ここからbashのソースをダウンロードする。その後、

$ tar zxf bash-3.2.tar.gz
$ cd bash-3.2
$ ./configure
$ make

でとりあえずmakeしてみた。どこにmainがあるんだろうと思ってgrepしてみたら、何箇所かmainが出てきて戸惑う。で、改めてソースファイルを見てみると、eval.cとかshell.cとかexecute_cmd.cあたりが怪しい感じ。色々見てみると、COMMANDっていう構造体(を起点に構成される各種構造体のリスト)に入力コマンドが単語に分かれて格納されているみたい。コメント文にbisonがどーのと書いてあるソースがあったので、おそらく、bashの入力文字列をまず構文解析して、その結果をいったんCOMMAND構造体群に格納しているのではないかなと。

で、僕が欲しいのは入力文字列なのだけど、これまたprint_cmd.cっていうそのままのソースがあったので、そこに仕掛けをして再makeして実行してみたけど、残念ながら入力コマンドがログに出力されない。ちょっとハズしたみたい。ただ、make_command_string()っていう、COMMAND構造体から文字列を生成する関数は使えそう。

で、結論を言うと、execute_command()っていう関数内で、command変数をmake_command_string()に渡して文字列化して、それを出力するととりあえず満足する結果が得られました。興味のある方は、execute_command()関数内で、入力コマンドをログ出力するなり、syslogに渡すなり、標準出力に出すなり、色々やってみてください。

なお、このページではdoxygenで作ったと思しきオープンソースのドキュメントが公開されています。バージョンが古いですが、bash-2.05bも載ってます。

|

« 黄金の扉を開ける賢者の海外投資術 | トップページ | LINUXデスクトップHACKS »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/207693/40768787

この記事へのトラックバック一覧です: bashの改造:

« 黄金の扉を開ける賢者の海外投資術 | トップページ | LINUXデスクトップHACKS »