在我运行的 ubuntu 服务器中,我在 中添加了自定义项,/etc/bash.bashrc
并作为.sh
文件添加到 中/etc/profile.d
,以便为我的用户添加一些有用的别名和功能。所有这些都为我的帐户正确运行。
但是,登录其他帐户(包括与我的帐户位于同一组的帐户)时,无论是通过su
或ssh
,这些自定义设置都不会加载。手动运行. /etc/profile
可以解决问题,但据我所知,这应该在交互式登录 shell 启动时自动发生。echo $0
从所有帐户运行都会返回-bash
,所以我假设它们实际上位于这样的外壳中。
否则为什么会发生这种情况,我该如何解决它?
答案1
我遇到同样的问题。我在检查/etc/profile
文件时找到了解决方案
...
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
所以只能检查.sh文件(Ubuntu 18)。我已将其重命名/etc/profile.d/conda
为/etc/profile.d/conda.sh
,现在它按预期工作!
答案2
~/.profile
和中的任何内容~/.bashrc
都会运行后 /etc/profile
和/bash.bashrc
。因此,如果它们共享相同的名称,第一个中设置的任何别名或变量将取代后者中设置的别名或变量。
对于任何可能有帮助的人:我面临的具体问题是因为我正在迁移服务器,并且我已要求我的用户备份他们拥有的所有重要文件并将其放回新服务器中。当他们这样做时,他们将其包含在内,~/.bashrc
因为它具有“使 python 工作的技巧”(即,它设置 PATH 变量以包含该anaconda
目录),以及我在以前的服务器中对他们的计算机进行的一些自定义。这与我设置的新别名(例如 的别名source activate
,变成了conda activate
)相冲突,并且从 conda 4.4 开始,conda.sh
应该添加到/etc/profiles.d/
而不是手动设置 PATH 变量。