Art*_*ero 27 rvm bash gnome-terminal .profile bashrc
我正在尝试将 RVM 与 gnome-terminal 集成。
默认情况下,gnome-terminal 不会将 bash 作为登录 shell 启动。我run command as a login shell按照这个答案中的建议启用了关于设置 RVM 的相同主题,但是当我这样做时,.bashrc文件没有被读取。
例如,我创建了一个环境变量.bashrc,然后当我启动一个新的 gnome-terminal 时,我无法读取它。我需要显式运行source .bashrc才能读取文件。
这是预期的行为吗?
les*_*ana 44
是的,这是预期的行为。
简而言之,行为如下:
~/.profile~/.bashrc就我个人而言,我认为这种行为很奇怪,我还没有找到这种设计决策的合理性。
术语的一些解释:
您看到的大多数 shell 都是交互式非登录 shell。如果您正在运行像 gnome 这样的图形环境,则尤其如此,因为 gnome 是“登录外壳”。在 gnome 中启动的任何 bash 会话都是非登录 shell。如果您想查看真正的交互式登录 shell,请转到虚拟控制台(使用Ctrl+Alt+F1),然后使用您的用户名和密码登录。那是一个真正的交互式登录 bash shell。您可以使用 返回到图形外壳Ctrl+Alt+F7。
有一个选项--login可以使 bash 的行为就像是登录 shell,即使在您登录后启动。配置 gnome-terminal 将 bash 作为登录 shell 启动意味着它将使用该--login选项启动 bash 。
通常,您希望 bash 始终~/.bashrc在交互式 shell 中读取。以下是我建议这样做的方法:
创建一个~/.bash_profile文件。如果 bash 作为登录 shell 启动,它将~/.bash_profile在查找~/.profile. 如果 bash 找到,~/.bash_profile则它不会读取~/.profile.
将以下几行放入~/.bash_profile:
[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
Run Code Online (Sandbox Code Playgroud)
现在,如果 bash 作为交互式登录 shell 启动,它将读取以下文件:
~/.bash_profile~/.profile~/.bashrc如果 bash 作为交互式非登录 shell 启动:
~/.bashrc您应该将 bash 特定的内容~/.bashrc和非 bash 特定的内容放入~/.profile. 例如PATH进去~/.profile和HISTCONTROL进去~/.bashrc。
请注意,这~/.profile不是特定于 bash 的。其他基于文本的 shell(例如 sh 或 ksh)和图形 shell(gnome)也读取~/.profile. 这就是为什么你不应该把 bash 特定的东西放在~/.profile.
小智 14
这既不是一个糟糕的设计决策,也不是一个错误,也不是 shell 和终端的预期行为
这只是 Gnome 终端中每个配置文件配置选项的不幸默认值,您可以轻松修复。
转到编辑->配置文件首选项。
选择标题和命令选项卡。
注意Run command as login shell复选框是如何取消选中的!核实。
就是这样。如果您对Default配置文件或任何配置为在创建新终端时使用的配置文件执行此操作,您将获得一个登录 shell。
我猜在幕后,这个选项可能会导致它将该选项传递-l给 shell。
| 归档时间: |
|
| 查看次数: |
45508 次 |
| 最近记录: |