【发布时间】:2017-02-20 07:34:41
【问题描述】:
如果我在运行脚本时使用LD_PRELOAD 指定要预加载的库,我发现该库实际上只有在脚本有shebang 行时才被预加载。例如,给定这个脚本:
# Not a shebang
echo Hello
还有这个命令:
LD_PRELOAD=/path/to/preload_me.so ./script.sh
脚本在完全没有加载库的情况下运行,我可以通过其初始化代码的(非)影响来监控它。
另一方面,如果我添加一个 shebang 行:
#!/bin/sh
echo Hello
...然后当我通过相同的命令运行脚本时,库 is 已加载。指定哪个解释器似乎并不重要。当然我也可以使用/bin/bash 或我尝试过的任何其他sh-family shell。
为什么会有区别,有什么方法可以确保在给定的 shell 简单命令之前预加载给定的库,而不管命令是什么?
(改编自another question,其作者拒绝用这些术语提出问题。)
【问题讨论】:
标签: linux bash elf ld-preload