如何确保在 bash 会话中为用户设置了环境变量?

如何确保在 bash 会话中为用户设置了环境变量?

如何确保为用户设置环境变量?我有

MYVAR=whatever
export MYVAR

在 ~/.bash_profile 中,但用户报告称它不起作用。可能发生了什么?

答案1

使用名为pam_env在登录时设置环境变量。如果使用此解决方案,环境变量也将对直接从“窗口管理器”(例如 GNOME、KDE)启动的 GUI 程序可用,而不仅仅是从终端启动的程序。此外,用户可以使用其他 shell,而不仅仅是 Bash。也许O'Reilly 的文章可以帮助您。

答案2

以下是来自 bash 手册页的一些摘录:

当 bash 作为交互式登录 shell 或使用 --login 选项作为非交互式 shell 调用时,它首先从文件 读取并执行命令(/etc/profile如果该文件存在)。读取该文件后,它会按顺序查找~/.bash_profile~/.bash_login~/.profile,然后从第一个存在且可读的文件中读取和执行命令。--noprofile启动 shell 时可以使用 选项来禁止此行为。

...

当启动非登录 shell 的交互式 shell 时,如果这些文件存在,bash 将从 和 读取并执行命令/etc/bash.bashrc~/.bashrc可以使用--norc选项禁止此操作。file选项将强制 bash 从 file 而不是和--rcfile读取并执行命令。/etc/bash.bashrc~/.bashrc

这可以解释为什么它“对他们不起作用”吗?

答案3

在您的代码中,您可以执行以下操作:

if [ x"$MYVAR" = "x" ]
    then
    echo "it didn't work"
    exit 1
fi
echo "it did work: $MYVAR"

如果您从用户自己的 .bash_login 或 .bashrc 之类的东西进行设置,他们是否会通过 sudo 退出他们的环境?

仅当变量的后续使用依赖于导出时,导出变量才会起作用;即,登录过程中的导出应该适用于他们运行的任何内容,除非他们使用 su/sudo,在这种情况下他们实际上离开了该环境,然后执行他们正在做的任何事情。

答案4

朱朱马

首先确保用户正在使用 bash。他/她可能正在使用 csh。如果您只想为该用户设置它,并且他们正在使用 bash/sh,那么您需要将其放入 .bashrc 文件中。如果是 csh/tcsh,您需要将其放入 .cshrc/.tcshrc 中。如果您希望为所有用户全局设置它,则 bash/tcsh 的 /etc/profile 和 /etc/csh.cshrc 分别可以让您开始使用!

高血压

相关内容