Vir*_*ato 44 bash path environment-variables bashrc .bash-profile
我发现这个问题 [博客]:.bashrc 和 .bash_profile 之间的区别非常有用,但在看到投票最多的答案(顺便说一句非常好)后,我还有其他问题。在投票最多的正确答案结束时,我看到以下声明:
请注意,您可能会在这里和那里看到将环境变量定义放在 ~/.bashrc 中或始终在终端中启动登录 shell 的建议。两者都是坏主意。
为什么这是一个坏主意(我不是想打架,我只是想了解)?
如果我想设置一个环境变量并将其添加到 PATH(例如 JAVA_HOME)中,它是放置导出条目的最佳位置?在~/.bash_profile或~/.bashrc 中?
如果问题 2 的答案是~/.bash_profile,那么我还有两个问题:
3.1. 你会在~/.bashrc下放什么?只有别名?
3.2. 在非登录 shell 中,我相信~/.bash_profile没有被“拾取”。如果 JAVA_HOME 条目的导出在 bash_profile 中,我是否能够执行javac和java命令?它会在 PATH 上找到它们吗?这就是为什么某些帖子和论坛建议将 JAVA_HOME 等设置为~/.bashrc 的原因吗?
提前致谢。
gee*_*aur 30
在现代系统中,遇到重要的情况并不特别常见,但确实会发生。(特别是,如果您以vim诸如:r !command或内联!<motion>command形式使用 shell 操作。)
你会在 ~/.bashrc 下放什么?只有别名?
你把那些~/.bashrc不会被子shell自动继承的东西放进去;这主要是指别名和函数,尽管有时您不希望在 shell 外看到变量设置(这种情况非常罕见)。可以争辩说,这些应该以某种方式导出,但是各种实验尝试都遇到了兼容性问题,试图将它们隐藏在环境中,并且大多已被放弃。
如果我想设置一个环境变量并将其添加到 PATH(例如 JAVA_HOME)中,它是放置导出条目的最佳位置?在 ~/.bash_profile 或 ~/.bashrc 中?
您放入环境设置,~/.bash_profile以便为它们提供合理的初始设置。有时你会想要覆盖这些(通常这是由复杂的环境完成的,比如 Matlab 或 Cadence);如果您将环境设置放入,~/.bashrc那么从这些环境中运行的 shell 将丢失环境的自定义设置,结果可能无法正常工作。如果您使用modules、virtualenv、rvm等包来管理多个开发环境,这也适用;放入您的设置~/.bashrc意味着您无法在编辑器中运行您想要的环境,而是会被强制进入系统默认设置。
在非登录 shell 中,我相信 ~/.bash_profile 没有被“拾取”。
这是对的; 您通常希望初始 shell 是登录 shell,并且在该 shell 下启动的任何 shell都不是登录 shell。如果初始 shell 不是登录 shell,则您将没有默认设置PATH或各种其他设置(包括您的JAVA_HOME示例)。
大多数从显示管理器启动的桌面环境(即绝大多数图形登录)并没有为整个桌面设置登录环境,因此您被迫在终端中运行初始 shell 作为登录 shell。这会导致许多问题(特别是PATH可用于从例如面板运行的程序的设置不正确,因为面板不是终端并且尚未运行~/.bash_profile),但考虑到并非总是可行,这是一个合理的折衷方案~/.bash_profile在由显示管理器启动的会话开始时在非交互式环境中正常运行,具体取决于其内容。有时建议将环境设置放在~/.bashrc而不是配置登录shell;如上所述,这个作品只要你不需要重写环境,并导致奇破损,一旦你做这样做的必要。
我最近帮助诊断这样一个问题,在OS X上哪里谁曾放置在设置的用户~/.bashrc,然后在以后使用开始rvm和perlbrew锯奇怪的行为,因为环境中成立了由两人“未完成”由~/.bashrc内编辑和sudo(这在OS X ,与 Linux 不同,传播用户的,$HOME以便它们~/.bashrc由 root shell 运行)。在尝试使用那些环境之前,没有问题;在开始使用它们时,他们对设置的意外丢失感到困惑。
| 归档时间: |
|
| 查看次数: |
60714 次 |
| 最近记录: |