Avd*_*vdi 235 unix environment-variables
这是尴尬的,但经过多年的使用POSIX系统充分的时间,我仍然有一个很难搞清楚,如果一个shell定制应该进去.bashrc,.profile或者别的地方。更不用说一些特定于操作系统的配置文件,如.pam_environment.
是的,我知道如何通过文档拼图并了解每个文件何时加载或未加载。我想知道的是,是否有人对如何决定将给定类型的自定义放入哪个文件中的每个文件都汇总了全面的指导方针。
小智 269
特尔;博士:
~/.bash_profile应该非常简单,只需加载.profile和
.bashrc(按此顺序)
~/.profile有与 bash 没有特别关系的东西,例如环境变量(PATH和朋友)
~/.bashrc在交互式命令行中拥有您想要的任何东西。EDITOR供我使用的命令提示符、变量、bash 别名
其他一些注意事项:
任何应该可用于图形应用程序或可用于 sh(或 bash 调用为sh)的东西都必须在~/.profile
~/.bashrc 不能输出任何东西
任何应该只对登录 shell 可用的东西都应该进入 ~/.profile
确保~/.bash_login不存在。
use*_*686 64
在过去的几年中,我有很多的时间可以浪费,所以我已经研究了这个多一点只需10分钟。我不知道这是否是最好的布局,它只是一种几乎在所有情况下都能正常工作的布局。
要求:
~/.profile 必须与任何 /bin/sh 兼容——这包括 bash、dash、ksh,以及发行版可能选择使用的其他任何东西。
环境变量必须放在控制台登录(即“登录”shell)和图形登录(即 GDM、LightDM 或 LXDM 等显示管理器)读取的文件中。
同时拥有 ~/.profile和没有什么意义~/.bash_profile。如果缺少后者,bash 会很乐意使用前者,并且可以通过检查$BASH或来保护任何特定于 bash 的行$BASH_VERSION。
*profile和之间的区别在于,*rc前者用于“登录”shell,后者用于每次打开终端窗口时。但是,“登录”模式下的 bash 没有 source ~/.bashrc,因此~/.profile需要手动执行。
在最简单的配置是:
有一个~/.profile设置所有环境变量(bash 特定的环境变量除外),可能打印一两行,~/.bashrc如果由 bash 运行,则源,否则坚持 sh 兼容的语法。
出口 TZ="欧洲/巴黎"
导出编辑器=“vim”
如果 [ "$BASH" ]; 然后
. ~/.bashrc
菲
正常运行时间
有一个~/.bashrc执行任何特定于 shell 的设置,通过检查交互模式来保护以避免破坏sftpDebian 之类的东西(其中 bash 编译时带有选项,~/.bashrc即使对于非交互式 shell 也可以加载):
[[ $- == *i* ]] || 返回 0
PS1='\h \w \$ '
开始(){ 须藤服务“$1”开始;}
但是,也存在某些非交互式命令(例如ssh <host> ls) skip 的问题~/.profile,但是环境变量对它们非常有用。
某些发行版(例如 Debian)编译他们的 bash 并选择~/.bashrc为此类非交互式登录提供源。在这种情况下,我发现它有用的所有环境变量(移动export ...线)到一个单独的文件,~/.environ以及从源代码这两者 .profile并.bashrc与保护,以避免做两次:
如果 ![“$前缀”]; 然后 # 或 $EDITOR,或 $TZ,或 ...
。~/.environ # 通常任何 .environ 本身会设置的变量
菲
不幸的是,对于其他发行版(例如 Arch),我还没有找到很好的解决方案。一种可能性是使用(默认启用)pam_env PAM 模块,将以下内容放入~/.pam_environment:
BASH_ENV=./.environ # 不是打字错误;它需要是一条路径,但是 ~ 行不通
然后,当然,更新~/.environ到unset BASH_ENV.
结论?贝壳是一种痛苦。环境变量很痛苦。特定于发行版的编译时选项是一个巨大的痛苦。
Fli*_*imm 42
看看ShreevatsaR这篇优秀的博客文章。这是一个摘录,但请转到博客文章,其中包括对“登录外壳”等术语的解释、流程图和 Zsh 的类似表格。
对于 Bash,它们的工作方式如下。阅读相应的列。执行 A,然后是 B,然后是 C 等等。B1、B2、B3 意味着它只执行找到的第一个文件。
+----------------+-----------+-----------+------+
| |Interactive|Interactive|Script|
| |login |non-login | |
+----------------+-----------+-----------+------+
|/etc/profile | A | | |
+----------------+-----------+-----------+------+
|/etc/bash.bashrc| | A | |
+----------------+-----------+-----------+------+
|~/.bashrc | | B | |
+----------------+-----------+-----------+------+
|~/.bash_profile | B1 | | |
+----------------+-----------+-----------+------+
|~/.bash_login | B2 | | |
+----------------+-----------+-----------+------+
|~/.profile | B3 | | |
+----------------+-----------+-----------+------+
|BASH_ENV | | | A |
+----------------+-----------+-----------+------+
| | | | |
+----------------+-----------+-----------+------+
| | | | |
+----------------+-----------+-----------+------+
|~/.bash_logout | C | | |
+----------------+-----------+-----------+------+
Run Code Online (Sandbox Code Playgroud)
Mec*_*ish 24
我为您提供我的“全面”指南:
.bash_profile并.profile加载(.bashrc如果存在),使用例如
[ -r $HOME/.bashrc ] && source $HOME/.bashrc
.bashrc。编辑:为“全面”添加了恐吓引号,以防万一有人想相信它。;)