2013-05-26 31 views
0

我要执行下面的命令时: “LD_PRELOAD=/path/to/my/so ./a.out设置LD_PRELOAD执行的shell脚本命令

所以我写了一个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中成功执行该命令。

有什么问题吗?

+0

你有没有找到'.so'的路径? – Bill

+0

我可以通过在bash中成功执行命令。 – Coaku

回答

4

这将是比较传统的,只是做这样的事情在你的脚本:

export LD_PRELOAD=whatever 
./a.out 
3

它寻找所谓的在你的路径LD_PRELOAD=/path/to/my/so的可执行文件,并不能找到它。您可以使用eval来解决这个问题:

eval $CMD 

,或等效:

bash -c "$CMD" 
0

是。

bash命令处理有几个阶段。在第一阶段,变量分配和重定向被识别并留待进一步处理。其余的命令然后传递到第二阶段。变量扩展和其他事物一起发生在这个阶段。

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

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