kal*_*gne 5 bash environment-variables
Unix
设置个人环境变量有约定吗?我读到它们应该被放入$HOME/.bash_profile
而不是$HOME/.bashrc
. 尽管如此,我正在考虑提供一种方法来区分我自己的变量。这样即使我忘记了,我也能一眼看出它是否是我设置的。例如,当我在终端中进行自动完成时,我可以使我的变量以下划线或减号“m”开头,就像C++
语言约定之一一样。我知道可能没有绝对的答案,但我想听听一些有助于实现此目的的良好实践和约定:提供一种简单的方法来区分系统环境变量和个人环境变量。
以下是我对在何处设置环境的建议以及解释。
相关详情如下:
用户配置文件是~/.bash_profile
、~/.bash_login
、 或~/.profile
。我建议使用前两个之一,因为最后一个与其他外壳重叠。不过,请参阅最后有关 GUI 登录的注意事项。
用户rc文件是~/.bashrc
.
交互式登录外壳(例如控制台登录或ssh
登录)仅读取配置文件。
非交互式登录 shell很少见,但它可能会在 GUI 登录期间运行。无论哪种方式,如果这是 Bash shell,它都会充当非交互式登录 shell,并且仅读取配置文件。
交互式非登录 shell(例如 XTerm/Konsole 中的新选项卡)读取 rc 文件。
非交互式非登录 shell(例如 shell 脚本)两者都不会读取,但有一个重要的例外:如果由 启动ssh
,它会读取 rc 文件。
涉及异常的原因ssh
是,当通过 ssh ( ) 运行脚本时ssh $host my_remote_script
,环境(主要是PATH
)尚未设置,就像运行本地脚本时的情况一样。因此,IMO,例外是在 中设置环境的动机~/.bashrc
,以便本地调用和远程调用的脚本使用相同的环境。
基于这一切,我的建议是:
配置文件:
PATH
.. ~/.bashrc
.rc 文件:
请注意,当环境已设置(通过交互式非登录 shell)时,将获取该文件。因此,如果你无条件地这样做,你可能会在两次采购后PATH=$HOME/bin:$PATH
得到结果(这是一个烦恼,而不是一个错误)。PATH=$HOME/bin:$HOME/bin:...
一个简单的解决方法是保护环境设置:
# ~/.bashrc
if [ ! "${MY_ENV_SET:-}" ]; then
PATH=...
...
export MY_ENV_SET=1
fi
Run Code Online (Sandbox Code Playgroud)仅为交互式 shell 定义 shell 细节:
...
[ "$PS1" ] || return 0
PS1=<fancy_colored_prompt>
source ~/.bash_alias
eval $(dircolors -b ~/.dircolors)
source /etc/bash_completion
Run Code Online (Sandbox Code Playgroud)图形用户界面登录。您需要考虑的最后一件重要事情是 GUIPATH
在启动过程中如何设置。这可以使用 Bash 来完成,也可以不使用。就我而言,我使用 KDE,并且该文件是在启动期间获取的:
# ~/.kde/env/path.sh
# https://userbase.kde.org/Session_Environment_Variables
PATH=$(env -i /bin/bash -lc 'echo $PATH')
Run Code Online (Sandbox Code Playgroud)
这会调用一个(罕见的)非交互式登录 Bash shell,使用一个空环境,该环境也源 rc 文件,并且一切都是一致的。
如果您使用另一个 GUI(Gnome?),您应该查看PATH
在启动过程中如何设置。如果您的 GUI 来源~/.profile
,请确保也从那里获取 rc 文件。
归档时间: |
|
查看次数: |
2135 次 |
最近记录: |