繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM