如何确保为用户设置环境变量?我有
MYVAR=whatever
export MYVAR
在 ~/.bash_profile 中,但用户报告称它不起作用。可能发生了什么?
答案1
答案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 分别可以让您开始使用!
高血压