使用Vagrant的配置脚本更新.bashrc文件

11

我正在尝试从Vagrant启动新实例时,通过配置脚本向我的主目录的.bashrc文件中添加一些额外的行。

在脚本中,我有:

set -x

sudo apt-get update

sudo apt-get install vim

echo "source /usr/local/share/chruby/chruby.sh">> ~/.bashrc
echo "source /usr/local/share/chruby/auto.sh">> ~/.bashrc

然而,在完成后,没有将任何内容写入到.bashrc文件中。

这是一个简化版本的完整脚本,其目的是安装Ruby/Rails。


在bashrc文件的添加之间添加一个调试回显,我猜测你的脚本由于控制结构而跳过了它。 - ShellFish
当bash脚本正在尝试回显到.bashrc中时,我在stdout中得到以下内容,它们正在运行-是否可能它们正在被回显到不在/home/vagrant中的.bashrc文件中?==> default: ++ echo 'source /usr/local/share/chruby/chruby.sh' ==> default: ++ echo 'source /usr/local/share/chruby/auto.sh' ==> default: ++ . /root/.bashrc ==> default: +++ '[' -z '' ']' ==> default: +++ return - Grant Trevor
如果是这样,您可以通过将“~”替换为从“/”开始的完整路径来轻松避免它吗? - ShellFish
3个回答

26
需要提供文件的完整路径。
例如:
echo "source /usr/local/share/chruby/chruby.sh" >> /home/vagrant/.bashrc

2
这是其他十几个SO线程没有的正确答案。当运行vagrant provisioner时,波浪号(~)显然无法解析为预期的内容。 - jpw
2
这是因为提供程序正在以root身份运行,~指的是/root而不是/home/vagrant - Kyle Chadha
我遇到了以下错误 /root/home/vagrant/.bashrc: 没有那个文件或目录 - Kosmetika

-1
将以下代码添加到 .bashrc 文件中:
if [ -f /usr/local/share/chruby/chruby.sh ]; then
    . /usr/local/share/chruby/chruby.sh
fi

它将文本方式地将脚本包含到.bashrc中,并在打开新的shell时执行它。


我不想手动添加这些行 - 我想通过一个shell脚本来添加它们。 - Grant Trevor
我不明白你的评论。将这些行添加到.bashrc文件中,脚本chruby.py应该在打开新shell时执行...我的回答并不建议您以任何方式从chruby.sh复制这些行并粘贴到.bashrc中...如果您确定文件存在,则可以在脚本中放置echo ". /usr/local/share/chruby/chruby.sh" >> ~/.bashrc - ShellFish

-2
尝试使用以下代码作为你最后两行 - 它应该会给你所需的结果。
echo "source /usr/local/share/chruby/chruby.sh" >> /home/vagrant/.bashrc

echo "source /usr/local/share/chruby/auto.sh" >> /home/vagrant/.bashrc

"source" 将尝试执行脚本中的行。 - philbrooksjazz
这将连接两个文件,我想要的是在.bashrc的末尾添加行“source /usr/local/share/chruby/chruby.sh”,以便在打开bash时执行。根据这里的步骤 - http://ryanbigg.com/2014/10/ubuntu-ruby-ruby-install-chruby-and-you// - Grant Trevor
好的,现在我明白你想做什么了。如果你只是从shell控制台输入那一行代码,它能正常工作吗?我两种方式都尝试过,都可以正常工作。尝试使用完整路径名设置目标.bashrc,而不是“~/”。我认为我上面的解决方案会达到同样的效果,但我同意这会使bashrc变得混乱。 - philbrooksjazz

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