为运行的命令设置 LD_PRELOAD 环境变量,无需键入完整路径

elt*_*mmo 5 linux bash environment-variables ld-preload

我正在使用 LD_PRELOAD 并生成了一个库,该库简单地将 put() 包装在一个函数中,该函数在打印之前将要打印的字符串转换为大写。然后我将 LD_PRELOAD 变量导出为

$ export LD_PRELOAD=/home/adrian/test/myputs.so
Run Code Online (Sandbox Code Playgroud)

现在运行命令时行为按预期工作

$ /bin/pwd
/HOME/ADRIAN/TEST
Run Code Online (Sandbox Code Playgroud)

但这样运行时不起作用

$ pwd
/home/adrian/test
Run Code Online (Sandbox Code Playgroud)

在这种情况下导致 LD_PRELOAD 环境变量被忽略的机制是什么?

TMS*_*TMS 4

因为pwdshell builtin command- 请参阅此处man bash文档。所以如果你写

$ pwd
Run Code Online (Sandbox Code Playgroud)

然后启动内置命令。如果你告诉它路径,它将执行 ELF 二进制文件并使用 LD_PRELOAD。

  • 谢谢!经过快速搜索后,我发现我可以使用“enable -n pwd”禁用内置密码,现在它的行为符合预期。 (2认同)