为什么我的 LD_LIBRARY_PATH 未设置启动终端?

kjf*_*tch 8 linux terminal shell environment-variables

我有一个 shell 脚本来设置一些环境变量并启动我作为参数发送的任何程序:

export PATH=$HOME/local/bin:$PATH
export LD_LIBRARY_PATH=$HOME/local/lib:$LD_LIBRARY_PATH
export TESTER="MY TEST VAR"

$@
Run Code Online (Sandbox Code Playgroud)

bash例如,当我使用它来调用它时,它可以工作:

kjfletch@flatbed:~$ envrun.sh bash
kjfletch@flatbed:~$ echo $LD_LIBRARY_PATH
/home/kjfletch/local/lib:
kjfletch@flatbed:~$ echo $TESTER
MY TEST VAR
Run Code Online (Sandbox Code Playgroud)

当我用它来调用终端 ( xterm, aterm, ...) 时,我LD_LIBRARY_PATH会被取消设置:

kjfletch@flatbed:~$ echo $LD_LIBRARY_PATH

kjfletch@flatbed:~$ echo $TESTER

MY TEST VAR
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?我怎么能阻止这个?(我正在运行 Debian 5.0)

更新

我的终端没有调用 bash 作为登录:

kjfletch@flatbed:~$ echo $0
bash
Run Code Online (Sandbox Code Playgroud)

我的LD_LIBRARY_PATH没有出现在任何 bash 启动文件中(除了 .bash_history 和 ~/.profile 不存在。):

kjfletch@flatbed:~$ grep "LD" ~/.bash*
kjfletch@flatbed:~$ grep "LD" /etc/bash.bashrc 
kjfletch@flatbed:~$ grep "LD" /etc/profile 
Run Code Online (Sandbox Code Playgroud)

Ted*_*ddy 10

终端二进制文件最有可能setgidutmp. LD_LIBRARY_PATH出于安全原因未设置 Setuid 和 setgid 二进制文件;见ld.so(8)

程序需要的必要共享库按以下顺序搜索

  • 使用环境变量LD_LIBRARY_PATHLD_AOUT_LIBRARY_PATH对于 a.out 程序)。除非可执行文件是 setuid/setgid 二进制文件,在这种情况下它会被忽略。


Gno*_*upi 0

似乎您的主目录中有一些定义此变量的 .bashrc (或等效)文件。但我不知道更多细节。

编辑好吧,既然启动 bash 有效,我猜不是.bashrc。但也许当您启动 xterm 或 aterm 时,其他一些配置文件恰好以相同的方式执行。