为什么没有流浪汉配置者修改〜/ .bashrc?

时间:2015-04-13 08:43:59

标签: vagrant vagrantfile

如何让Vagrantfile将文件内容追加到〜/ .bashrc文件?

在我的Vagrantfile中,我试图将文件/ vagrant / dev_env_config的内容追加到〜/ .bashrc文件中。

当我运行vagrant up时,它输出echo语句并输出〜/ .bashrc文件的预期内容....所以我知道它正在读取文件dev_env_config和APPEARS以附加它。

然而,当我运行vagrant ssh然后cat ~/.bashrc时,〜/ .bashrc文件未被修改,它是默认的〜/ .bashrc文件

换句话说,〜/ .bashrc文件的mod在流浪者运行时和我运行vagrant ssh之间的某处丢失了

# Vagrantfile

Vagrant.configure("2") do |config|
  ... various cmds to set box and network...
  $install_user_vars = <<SCRIPT
      sudo cat /vagrant/dev_env_config  >> ~/.bashrc
      echo "*** here is the .bashrc file:"
      cat ~/.bashrc
SCRIPT
  config.vm.provision "shell", inline: $install_user_vars
end

2 个答案:

答案 0 :(得分:3)

我认为正在发生的事情是配置脚本以root(或sudo)身份运行,因此“〜”home位置实际上是/ root而不是默认用户home位置/ home / vagrant。

我可以想出几种方法来解决这个问题:

首先(可能最简单)是明确关于.bashrc路径,如:

# Vagrantfile

Vagrant.configure("2") do |config|
  ... various cmds to set box and network...
  $install_user_vars = <<SCRIPT
      sudo cat /vagrant/dev_env_config  >> /home/vagrant/.bashrc
      echo "*** here is the .bashrc file:"
      cat /home/vagrant/.bashrc
SCRIPT
  config.vm.provision "shell", inline: $install_user_vars
end

第二个选项可能是将此部分配置脚本作为非特权用户运行。请参阅Shell Scripts文档页面上的“特权”选项。

答案 1 :(得分:1)

原始解决方案是明确地将路径设置为.bashrc。作为规则,SSH用户的默认用户名(将用于vagrant ssh操作)为vagrant所以:

$install_user_vars = <<SCRIPT
      sudo cat /vagrant/dev_env_config  >> /home/vagrant/.bashrc
      echo "*** here is the .bashrc file:"
      cat /home/vagrant/.bashrc
SCRIPT

此外,我不确定是否有必要使用sudo命令(在sudo cat ...中)。可能您不需要它,但它取决于用于运行配置脚本的用户。我想这也是vagrant

因此,如果它真的是vagrant,您可以将.bashrc路径保留为未修改(~/.bashrc),但必须删除sudo cat ...命令并使用简单cat ...而是。在我看来,这是一个更清洁的解决方案。因为实际上我们不应该使用sudoroot)权限。