系统启动后只为 BASh 启用 LD_PRELOAD

Enable LD_PRELOAD just for BASh after system startup

有没有办法 inject/enable LD_PRELOAD 仅用于新会话(即:BASh)?

我有一个语法高亮库,我想自动启用它(即:为某些用户突出显示警告),只需要为 BASh 而不是所有进程加载它。如果我把它放在 /etc/ld.so.preload 中,它会造成破坏并导致所有系统服务和其他不需要它的程序出现问题 运行,包装系统调用(printfexec 为主)。

有没有简单的方法可以做到这一点?

最简单的解决方案可能是用执行 LD_PRELOAD 逻辑的 shell 脚本替换 bash,然后调用实际的(重命名的)bash 二进制文件。

也就是将/bin/bash移动到/bin/bash.original,然后创建一个脚本/bin/bash,内容如下:

#!/bin/sh

LD_PRELOAD=/path/to/my/library.so
export LD_PRELOAD
exec /bin/bash.original "$@"

如果您只想在连接到交互式会话时执行 LD_PRELOAD,则可以在此处包含逻辑(例如 "is stdout a tty")。在 bash 未连接到 tty 时尝试执行任何类型的终端操作可能会产生奇怪的结果。