在Vagrant Provisioning期间重新加载.bashrc

时间:2014-08-06 04:24:07

标签: bash vagrant rbenv

我正在为Vagrant使用shell提供,我正在尝试使用rbenv安装rails。

遵循本指南:

https://gorails.com/setup/ubuntu/14.04

我已经到了这个工作脚本

# Update sources:
whoami
sudo apt-get -y update
sudo apt-get -y install build-essential zlib1g-dev curl git-core sqlite3 libsqlite3-dev git libssl-dev


#install rbenv and Ruby 1.9.2
git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
sudo mkdir /usr/local/share/ruby-build
~/.rbenv/plugins/ruby-build/install.sh
~/.rbenv/bin/rbenv install 2.1.2
~/.rbenv/bin/rbenv global 2.1.2

上面的指南使用exec $SHELL将rbenv添加到$ PATH。我有这个命令,bashsource .bashrc等等。要么他们不刷新$ PATH变量,要么他们提前退出配置脚本。所以现在我必须通过它的完整路径调用rbenv。有没有办法重新加载bash,所以我可以在Vagrant配置脚本中刷新$ PATH?

1 个答案:

答案 0 :(得分:0)

有没有理由不按原样在脚本中export PATH="$HOME/.rbenv/bin:$PATH"?这将修改当前会话的环境。或者,在附加到相关文件后在脚本中使用source ~/.bashrc ...如果这不起作用,那么就会发生一些奇怪的事情。

请注意,bash通常不会在启动时读取.bashrc文件。它在特定情况下这样做,它以交互方式启动而不是作为登录shell。大多数bash的程序化调用都是非交互式的。通过在调用shell之前设置BASH_ENV环境变量,可以指定bash文件在非交互式调用时读取。