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
终端二进制文件最有可能setgid将utmp. LD_LIBRARY_PATH出于安全原因未设置 Setuid 和 setgid 二进制文件;见ld.so(8):
程序需要的必要共享库按以下顺序搜索
- 使用环境变量
LD_LIBRARY_PATH(LD_AOUT_LIBRARY_PATH对于 a.out 程序)。除非可执行文件是 setuid/setgid 二进制文件,在这种情况下它会被忽略。
似乎您的主目录中有一些定义此变量的 .bashrc (或等效)文件。但我不知道更多细节。
编辑好吧,既然启动 bash 有效,我猜不是.bashrc。但也许当您启动 xterm 或 aterm 时,其他一些配置文件恰好以相同的方式执行。
| 归档时间: |
|
| 查看次数: |
15196 次 |
| 最近记录: |