在Vagrant Provisioning期间重新加载 .bashrc

4
我正在使用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

你的脚本中有没有不使用 export PATH="$HOME/.rbenv/bin:$PATH" 的原因呢?这将修改当前会话的环境。或者,你可以在追加到相关文件后,在脚本中使用 source ~/.bashrc,这也应该可以工作... 如果这样做不起作用,那么可能发生了一些奇怪的事情。

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


我使用了相同的脚本或类似的脚本来提供vagrant box,但是我遇到了同样的问题。我使用了这个答案中的建议,它非常有效。我还将其添加到bashrc中,但是直接在脚本中导出就可以了。感谢CBHacking。 - user578994

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接