3

我想执行这样的命令:“ 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 中成功执行命令。

哪里不对了?

4

3 回答 3

6

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

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

It's looking for an executable called LD_PRELOAD=/path/to/my/so in your path and can't find it. You can use eval to get around this:

eval $CMD

Or, equivalently:

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

是的。

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

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

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

于 2013-05-26T03:38:41.293 回答