短い話:システムの動作を追跡するために実行可能ファイルが呼び出される方法を追跡したいと思います。私が実行可能ファイルを持っているとしましょう:
/usr/bin/do_stuff
そして実際には、symlinkを介してさまざまな名前で呼び出されます。
/usr/bin/make_tea -> /usr/bin/do_stuff
/usr/bin/make_coffee -> /usr/bin/do_stuff
等々。明らかに、do_stuff
受け取った最初の引数を使用して、実際に実行されるアクションを決定します。残りの引数は、それに照らして処理されます。
これまでの呼び出し/usr/bin/do_stuff
(および引数の完全なリスト)を記録したいと思います。シンボリックリンクがない場合は、スクリプトに移動do_stuff
しdo_stuff_real
て記述します
#!/bin/sh
echo "$0 $@" >> logfile
/usr/bin/do_stuff_real "$@"
ただし、呼び出された名前が調べられることがわかっているので、これは機能しません。同じことを実現するスクリプトをどのように記述しますdo_stuff
か?
記録のために、これらの行での回答を避けるために:
- Cで(execveを使用して)実行できることはわかっていますが、この場合はシェルスクリプトを使用するだけではるかに簡単です。
- 単純に
do_stuff
ロギングプログラムに置き換えることはできません。