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も載ってます。
| 固定リンク
この記事へのコメントは終了しました。


コメント