• ベストアンサー

コマンドフック

linuxで全てのコマンドを投入した時にフックし、自作のスクリプトにそのコマンドを渡すような方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.3

No2です。 >その処理の内部でその時に実行されたコマンドが何かを判断し、別の処理をさらに実行するという事をしたいのです。 コマンドを実行した「後」で、今実行したコマンドが何であったのかを知るのは可能です。bashで、 PROMPT_COMMAND='history 1 | foo' で、fooと言うプログラムで直前のコマンドを解析する。 bashの設定でヒストリに残さないこともあるので、そういうことがないように、HISTCONTROL HISTIGNORE HISTSIZE を適切に設定します。 ただしhistoryで表示されるのは、(ヒストリ置換以外の)各種置換や展開の前のコマンドラインなので、変数展開とかファイル展開などを自分で行う必要があります。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.2

シェルへ手動で打ち込んだコマンドが対象であれば、 ・シェルを自作する ・シェルを改造する(簡単な改造ならそんなに難しくは無いと思うがこういう質問をする人には無理か) で可能。シェル(bash/tcsh等)の設定などでは不可能。 他のプログラムから内部的に起動されるコマンドなども対象なら ・カーネルを改造する で可能。それ以外の方補では不可能。 実際にやりたいことを書くと、他のもっと簡単な方法があるかも。

maenoina
質問者

補足

シェルの設定でやはり不可能でしょうか。 例えば、zshだとprecmdなどがあったり、bashだとちょっと違うかもしれませんがPROMPT_COMMANDなどがあったりすると思います。 やりたいことは、その処理の内部でその時に実行されたコマンドが何かを判断し、別の処理をさらに実行するという事をしたいのです。

回答No.1

シェルにラッパーをかけるしか思いつきません・・・ 要は、適当なスクリプトをユーザが使うシェルの代わりに配置して、受けた入力を「自作のスクリプト」に渡しつつ本来のシェルで実行するということです。

関連するQ&A