我有一些特殊的别名,并在一些服务器(CentOS 7,bash shell)上设置了这些别名。
其中一些是特定于服务器的(例如:哪个 IP 指向互联网、服务器的主机名等),而另一些则与所有这些相关(命令别名等)。
我在文件中设置了每个服务器的唯一别名~/.bash_profile
,该别名提供了另一个文件,通过 Git 传播,其中包含所有非唯一的环境变量。这样,每当我添加别名或变量时,我希望所有服务器都添加它,我会将其添加到文件中并通过 Git 推送。
然而,我开始明白,在某些(看似罕见)的情况下,非唯一的别名和变量只有在~/.bash_profile
登录后手动获取后才可用。大多数时候它按原样工作正常 - 我登录,一切都正常已设置,而其他时候则需要另一个源。
我尝试从不同位置获取非唯一文件 - 使用来自/etc/profile.d/
、 using /etc/bashrc
、/etc/profile
和 的脚本~/.bash_rc
,这会导致一个挂起登录的循环。
bash_profile 看起来像这样:
# .bash_profile
source "/etc/non_uniques_file"
#Unique to this server
alias servername=[name of server]...
非唯一文件看起来像这样:
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export HISTTIMEFORMAT="%d/%m/%y %T "
export HISTSIZE=2000
export HISTFILESIZE=20000...
我的问题是 - 从哪里获取唯一文件并在所有情况下在系统范围内设置它的正确位置在哪里?
尽管登录方法相同,但在某些登录中设置了这些变量,而在其他登录中未设置这些变量,这可能是什么原因?
谢谢!
答案1
私人与全球
任何.profile
或.rc
文件(如 等).bashrc
存储在主目录任何注册用户的 明确属于该用户。
这意味着它们不适合其他用户采购。 (即全球)。
全局变量
这些通常是后备文件。在任何用户登录之前加载,因此它们充当新用户等的基本默认后备。
实际上,在不同的发行版中,它们的位置可能有所不同。类似的地点/etc/default
是开始寻找的好地方。
由于 Linux 的自由和开源性质,您应该查看文档以获取有关您的发行版的更准确信息。
答案2
如果您在更新配置文件或所获取的文件之前已经登录,则不会再次获取它。您应该查看 bash 手册中的 INVOCATION 部分 ( man bash
),它解释了在各种场景(交互式 shell、登录 shell 等)下读取哪些文件。
您还以不寻常的方式使用别名,我认为您应该忘记别名,只需设置变量并导出它们。
我认为有两种选择:
不要获取任何内容,只需将要运行的两个文件放入 /etc/profile.d 我会将它们命名为 appname_global_vars 和 appname_node_vars
将它们放在 /etc/profile.d 之外的任何可读位置(您已经有 /home/bin 那么为什么不放在那里呢?