【问题标题】:Update .bashrc from provisioning shell script with Vagrant从使用 Vagrant 配置 shell 脚本更新 .bashrc
【发布时间】:2014-11-19 20:06:39
【问题描述】:

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

在我的 shell 脚本中:

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 文件之间添加调试回显,我最好的猜测是您的脚本由于控制结构而以某种方式跳过它。
  • 当 bash 脚本遇到试图回显到 .bashrc 的行时,我在标准输出中得到以下内容,它们正在运行 - 它们是否有可能被回显到 .bashrc不在 /home/vagrant 中的文件? ==> 默认值:++ echo 'source /usr/local/share/chruby/chruby.sh' ==> 默认值:++ echo 'source /usr/local/share/chruby/auto.sh' ==> 默认值:++。 /root/.bashrc ==> 默认值:+++ '[' -z '' ']' ==> 默认值:+++ 返回
  • 如果是,您可以通过将~ 替换为/ 的完整路径来轻松避免它?

标签: linux bash vagrant


【解决方案1】:

您需要提供文件的完整路径。

例如

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

【讨论】:

  • 这是十几个其他 SO 线程所没有的正确答案。 ~ 在运行 vagrant 供应商时显然没有按预期解决。
  • 那是因为provisioner是以root身份运行的,~指的是/root,而不是/home/vagrant
  • 我有以下错误`/root/home/vagrant/.bashrc:没有这样的文件或目录`
【解决方案2】:

将这些行添加到 .bashrc

if [ -f /usr/local/share/chruby/chruby.sh ]; then
    . /usr/local/share/chruby/chruby.sh
fi

它会将脚本文本包含在 .bashrc 中,并在打开新 shell 时执行。

【讨论】:

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

在你的最后两行试试这个 - 它应该会给你你需要的东西。

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

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

【讨论】:

  • 'source' 将尝试执行脚本的行。
  • 这将连接两个文件,我所追求的是将“source /usr/local/share/chruby/chruby.sh”行添加到 .bashrc 的末尾,以便它在何时执行我打开bash。按照这里的步骤 - ryanbigg.com/2014/10/ubuntu-ruby-ruby-install-chruby-and-you/
  • 好的 - 现在我明白你想要做什么了。如果您只是从 shell 控制台键入该行 - 它有效吗?我两种方式都试过了,效果很好。尝试使用完整路径名而不是“~/”来设置目标 .bashrc。我认为我上面的解决方案会做同样的事情,但我同意会弄乱 bashrc
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2015-06-16
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多