为什么当使用带有 bash 的 screen 时我的 $LD_LIBRARY_PATH 会被取消设置?

为什么当使用带有 bash 的 screen 时我的 $LD_LIBRARY_PATH 会被取消设置?

这与为什么我的 LD_LIBRARY_PATH 未设置启动终端?,但症状不同。

首先,/usr/bin/screen根据另一个问题,它是 setuid。其次,/bin/tcsh由于各种历史原因,此系统上的默认 shell 是,并且我们不允许 chsh 到/bin/bash,因此我通常在登录后立即手动运行 bash。第三,我几乎总是使用 screen,但我想在 screen 中按 ctrl-a ctrl-c 创建一个新的 bash“选项卡”,因此我总是先调用 bash。

那是:

{~} $ echo $SHELL
/bin/tcsh
{~} $ bash
[~] echo $SHELL
/bin/bash
[~] screen -U
[~]

...重新连接时:

{~} $ echo $SHELL
/bin/tcsh
{~} $ screen -dUr
[~] echo $SHELL
/bin/bash
[~] 

但是,我的$LD_LIBRARY_PATH在 tcsh 中存在,在 bash 中也存在,但是一旦我运行 screen 就为空;如果我仅从 tcsh 运行 screen ,它仍然存在,但是当我在 screen 中使用 ctrl-a ctrl-c 时,我会得到新的 tcsh“选项卡”。

有任何想法吗?

答案1

因为 screen 是 setuid,所以它会取消设置LD_LIBRARY_PATH。当您的 shell 是 tcsh 时,tcsh 初始化(.tcshrc我猜是来自,因为 screen 默认不创建登录 shell)会LD_LIBRARY_PATH再次设置。如果您想LD_LIBRARY_PATH在 bash screen 窗口中设置,请从 进行设置.bashrc

答案2

大多数人在 .bash_profile 或 .bashrc 中设置 $PATH 和 $LD_LIBRARY_PATH,认为它们是一样的,但事实并非如此。我理解一个是用于“真实 shell”,一个是用于“远程 shell”(我永远记不住哪个是哪个)。基本上,根据您登录的方式(ssh、桌面终端、屏幕、w/e),将执行其中一个或另一个。如果您在一个文件中设置了变量,而另一个文件没有设置,请考虑将其中一个文件设置为指向另一个文件的符号链接或将其设置为一行:

echo "source .bashrc" > .bash_profile

*假设您现在使用.bashrc;否则:

echo "source .bash_profile" > .bashrc

这样,无论您如何登录,您的变量都会被设置。

相关内容