3

次のようなコマンドを実行したい: " LD_PRELOAD=/path/to/my/so ./a.out"

だから私はシェルスクリプトを書いた:

cmd="LD_PRELOAD=/path/to/my/so ./a.out"
${cmd}

エラーが発生:

LD_PRELOAD=/path/to/my/so : no such file or directory

ちなみに、ファイル/path/to/my/soは存在し、bash でコマンドを正常に実行できます。

何か間違っていますか?

4

3 に答える 3

6

スクリプトで次のようなことを行うのは、より伝統的です。

export LD_PRELOAD=whatever
./a.out
于 2013-05-26T02:38:10.503 に答える
3

パスで呼び出さLD_PRELOAD=/path/to/my/soれた実行可能ファイルを探していますが、見つかりません。これを回避するために使用できますeval

eval $CMD

または、同等に:

bash -c "$CMD"
于 2013-05-26T02:55:25.033 に答える
0

はい。

bash コマンドの処理にはいくつかの段階があります。最初の段階で、変数の割り当てとリダイレクトが識別され、さらなる処理のために確保されます。コマンドの残りの部分は、2 番目のステージに渡されます。可変拡張は、他のものとともに、その段階で発生します。

第 2 段階の結果のような単語FOO=barは、変数の代入として解釈されなくなりました。

変数の割り当てやリダイレクトを含むコマンドを 1 つの単語に圧縮したい場合は、関数を作成することをお勧めします。

于 2013-05-26T03:38:41.293 に答える