在shell脚本中执行命令时设置LD_PRELOAD

时间:2013-05-26 02:20:43

标签: linux bash shell

我想执行这样的命令:“LD_PRELOAD=/path/to/my/so ./a.out

所以我写了一个shell脚本:

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中成功执行命令。

有什么不对吗?

3 个答案:

答案 0 :(得分:4)

在你的剧本中做这样的事情会更传统:

export LD_PRELOAD=whatever
./a.out

答案 1 :(得分:3)

它正在您的路径中查找名为LD_PRELOAD=/path/to/my/so的可执行文件,但无法找到它。您可以使用eval解决此问题:

eval $CMD

或等同地:

bash -c "$CMD"

答案 2 :(得分:0)

bash命令处理有几个阶段。在第一阶段,识别变量分配和重定向,并留出进行进一步处理。然后将命令的其余部分传递给第二阶段。变量扩展以及其他事情发生在那个阶段。

第二阶段产生的像FOO=bar这样的词语不再被解释为变量赋值。

如果要将带有变量赋值和/或重定向的命令压缩为单个单词,我建议编写一个函数。