Vir*_*ato 209 bash .profile environment-variables bashrc source
我有一个 Ubuntu 11.04 虚拟机,我想设置我的 Java 开发环境。我做了如下
sudo apt-get install openjdk-6-jdk将以下条目添加到~/.bash_profile
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export PATH=$PATH:$JAVA_HOME/bin
Run Code Online (Sandbox Code Playgroud)保存更改并退出
再次打开终端并输入以下内容
echo $JAVA_HOME (blank)
echo $PATH (displayed, but not the JAVA_HOME value)
Run Code Online (Sandbox Code Playgroud)什么也没发生,就像 JAVA_HOME 的导出和它添加到 PATH 从未完成一样。
我不得不去~/.bashrc并在文件末尾添加以下条目
#Source bash_profile to set JAVA_HOME and add it to the PATH because for some reason is not being picked up
. ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
gei*_*rha 265
~/.bash_profile仅在以登录模式启动时由 bash 提供。这通常是当你在控制台(登录Ctrl+ Alt+ F1.. F6),通过ssh,或者连接使用sudo -i或su -运行作为另一个用户的命令。
当您以图形方式登录时,~/.profile将专门由启动 gnome-session(或您使用的任何桌面环境)的脚本提供。所以~/.bash_profile当您以图形方式登录时根本没有来源。
当您打开终端时,终端会以(非登录)交互模式启动 bash,这意味着它将提供 .bashrc 文件~/.bashrc。
放置这些环境变量的正确位置在 中~/.profile,下次登录时效果应该很明显。
采购~/.bash_profile从~/.bashrc是错误的解决方案。它应该是相反的;~/.bash_profile应来源~/.bashrc。
请参阅DotFiles以获得更详尽的解释,包括一些关于它为何如此的历史。
(附带说明,当通过 apt 安装 openjdk 时,符号链接应该由包设置,这样你就不需要设置JAVA_HOME或更改PATH)
lga*_*rzo 55
您可以通过运行以下命令来检查您的 Bash shell 是否作为登录 shell 启动:
shopt login_shell
Run Code Online (Sandbox Code Playgroud)
如果答复是off您没有运行登录 shell。
阅读 Bash 手册的调用部分,了解 Bash 如何读取(或不读取)不同的配置文件。
摘自man bash:
当 bash 作为交互式登录 shell 或作为具有
--login选项的非交互式 shell 调用时,它首先从文件中读取并执行命令/etc/profile(如果该文件存在)。读取该文件后,它会按该顺序查找~/.bash_profile、~/.bash_login、 和~/.profile,并从第一个存在且可读的命令中读取和执行命令。
su另一方面,默认情况下也不会启动登录 shell,您必须使用该--login选项告诉它这样做。
小智 36
我认为值得一提的是,您可以通过编辑配置文件首选项来更改 gnome-terminal 的默认值以使用登录 shell(即 bash -l)。
转到编辑 -> 配置文件首选项 -> 标题和命令选项卡检查“作为登录 shell 运行命令”选项
Flo*_*sch 17
如果您打开终端或运行sushell,它不会作为登录 shell 执行,而是作为普通的交互式 shell 执行。所以它读取~/.bashrc但不是~/.bash_profile。您可以su使用-l选项运行,使其作为登录 shell 运行您的 shell。
当您使用 GUI 时,shell 通常永远不会作为登录 shell 运行,因此通常可以将所有内容放入~/.bashrc.
TL; 博士
在经典推荐的 ubuntu 设置中,~/.bash_profile仅在特定场合进行评估。这是有道理的。
把你的东西放进去~/.bashrc,它每次都会得到评估。
好的,我想明白,为什么这有意义?
了解正在发生的事情的关键点:
所以“登录”时间通常是:
ssh,由于 shell 将成为所有进程的父进程,它将加载您的
~/.bash_profile.gnome-session对于经典 ubuntu)将负责读取.profile.好的,那么我的东西放在哪里?
它相当复杂,完整的故事在这里。但是这里有一个对于 ubuntu 用户来说很常见的问题。所以考虑到:
bash壳,~/.bash_profile并按照建议~/.bashrc在你的中添加加载,~/.bash_profile以便获得至少一个被评估的文件,无论调用机制是什么。这是放置东西的快速建议。
~/.bashrc (在所有情况下都得到评估,只要您遵循建议)
对于快速评估环境变量和代码为您的 用户只和唯一的bash-命令行使用(别名为实例)。欢迎bashism。
它在以下情况下自行加载:
bashscreen新窗格或选项卡。(不是tmux!)terminator/ gnome-terminal...)中的任何 bash 实例,如果您不勾选
选项“作为登录 shell 运行命令”。由于先前的建议,它将在所有其他场合加载。
~/.bash_profile (仅在特定场合评估)
用于仅用户和控制台会话进程的慢速评估环境变量和代码。 欢迎bashism。它被加载到:
tmux新窗格或窗口(默认设置),(不是screen!)bash -l,terminator/ gnome-terminal...)中的任何 bash 实例。~/.profile (仅在图形会话中评估)
对于缓慢评估的环境变量,并且 对您的用户和所有图形会话进程没有偏见。它在您的图形用户界面登录时加载。
| 归档时间: |
|
| 查看次数: |
359027 次 |
| 最近记录: |