[英]Set LD_PRELOAD when executing a command in shell script
我要执行这样的命令:“ 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中成功执行命令。
哪里不对了?
在脚本中执行以下操作会更加传统:
export LD_PRELOAD=whatever
./a.out
它正在LD_PRELOAD=/path/to/my/so
寻找名为LD_PRELOAD=/path/to/my/so
的可执行文件,但找不到它。 您可以使用eval
来解决此问题:
eval $CMD
或者,等效地:
bash -c "$CMD"
是。
bash命令处理分为几个阶段。 在最开始的阶段,变量分配和重定向将被识别并留作进一步处理。 然后,其余命令将传递到第二阶段。 在此阶段发生变量扩展以及其他事情。
第二阶段产生的FOO=bar
之类的词不再被解释为变量分配。
如果要将带有变量分配和/或重定向的命令压缩为单个单词,建议您编写一个函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.