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 次 |
| 最近记录: |