いくつかのスクリプトがあり、スクリプトのいくつかのコマンドは次のとおりです。
./executable arg1 arg2 .. argn
上記のコマンドを次に変更したいと思います。
LD_PRELOAD=/some/lib ./executable my_arg1 my_argn arg1 arg2 argn; some_other_command
スクリプトを変更する1つの方法ですが、そうしたくありません。このコマンドを傍受して変更して実行したいです。どうすればいいですか?
答え1
まず、既存の実行可能ファイルを新しい場所に移動します。
mv ./executable ./executable.original
次に、その中にシェルスクリプトを作成します。次のコマンドを次の新しいファイルに入力します./executable
。
#!/bin/sh
LD_PRELOAD=/some/lib ./executable.original my_arg1 my_argn "$@"
some_other_command
シェルは"$@"
呼び出し元プログラムによってarg1 arg2 argn
提供される注文を置き換えます。
第三に、新しいファイルに実行ビットを設定します。
chmod a+rx ./executable
答え2
Bashではファンキーな関数名を持つことができるので、これは正確に必要なことをする必要があります。
./executable() {
LD_PRELOAD=/some/lib command ./executable my_arg1 my_argn arg1 arg2 argn
}
もちろん、傍受したり、そうでexecutable
はないでしょう。/usr/bin/executable