我想执行这样的命令:“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中成功执行命令。
有什么不对吗?
答案 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
这样的词语不再被解释为变量赋值。
如果要将带有变量赋值和/或重定向的命令压缩为单个单词,我建议编写一个函数。