我正在尝试将RVM与gnome-terminal集成。
默认情况下,gnome-terminal不会将bash作为登录shell启动。我run command as a login shell
按照此答案中的建议启用了有关设置RVM的同一主题,但是执行此.bashrc
操作时不会读取文件。
例如,我在中创建一个环境变量.bashrc
,然后在启动新的gnome终端时无法读取它。我需要明确运行source .bashrc
以读取文件。
这是预期的行为吗?
我正在尝试将RVM与gnome-terminal集成。
默认情况下,gnome-terminal不会将bash作为登录shell启动。我run command as a login shell
按照此答案中的建议启用了有关设置RVM的同一主题,但是执行此.bashrc
操作时不会读取文件。
例如,我在中创建一个环境变量.bashrc
,然后在启动新的gnome终端时无法读取它。我需要明确运行source .bashrc
以读取文件。
这是预期的行为吗?
Answers:
是的,这是预期的行为。
简而言之,行为如下:
~/.profile
~/.bashrc
阅读bash手册中有关启动文件的更多信息。
就我个人而言,我认为这种行为很奇怪,并且我还没有找到合理的设计方案。
有关术语的一些解释:
您看到的大多数外壳都是交互式非登录外壳。如果您正在运行像gnome这样的图形环境,则尤其如此,因为gnome是“登录外壳”。在gnome内启动的任何bash会话都是非登录shell。如果要查看真正的交互式登录Shell,请转到虚拟控制台(使用Ctrl+Alt+F1
),然后使用用户名和密码登录。那是一个真正的交互式登录bash shell。您可以使用返回图形外壳Ctrl+Alt+F7
。
有一个选项--login
可以使bash像登录shell一样运行,即使在您登录后启动也是如此。将gnome-terminal配置为以登录shell启动bash意味着它将使用该--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"
现在,如果bash作为交互式登录shell启动,它将读取以下文件:
~/.bash_profile
~/.profile
~/.bashrc
如果bash作为交互式非登录shell启动:
~/.bashrc
您应该将特定于bash的东西放进,~/.bashrc
而非特定于bash的东西放进~/.profile
。例如PATH
进去~/.profile
和HISTCONTROL
进去~/.bashrc
。
请注意,这~/.profile
并非特定于bash。其他基于文本的外壳程序(例如sh或ksh)和图形外壳程序(gnome)也可以阅读~/.profile
。这就是为什么您不应该将bash特定的内容放入其中的原因~/.profile
。
~/.bashrc
放在首位,而不是放在配置文件中。故障在rvm上。
~/.profile
.bashrc
相对于其需要执行的操作的评估。如果交互式外壳始终读取,.bashrc
应该在此之前还是之后.profile
?如果你想建立一些东西,什么.bashrc
该.profile
想当然?而在同一时间,你想在某些事情上.bashrc
依靠的东西成立.profile
?两种加载顺序都无法满足这两种情况。
我遇到了同样的问题,并找到了解决方案:只需将SSH用于真实的登录shell!
1.以超级用户身份创建完全隔离的rvm系统专用用户,并分配密码:
sudo su
useradd -m rvmuser
passwd rvmuser
2.安装依赖项,以便rvm可以构建红宝石而无需询问超级用户密码:
apt-get install curl gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake bison libffi-dev
3.通过SSH进入localhost以获得真正的登录shell(您可能必须这样做apt-get install ssh
)
ssh rvmuser@localhost
4.安装rvm
\curl -sSL https://get.rvm.io | bash -s stable
5.注销并再次登录,以便加载所有rvm函数
exit
ssh rvmuser@localhost
6.使用rvm :)
使用bash将配置文件初始化放入时很常见.bash_profile
,这在登录时只能由bash读取,而其他shell历来是共享的.profile
。这使您可以将特定于bash的命令放在中.bash_profile
。
通常使用以下方法提取在中定义的别名.bashrc
:
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi