为什么 vagrant Provisioner 不修改 ~/.bashrc ?

jpw*_*ynn 3 vagrant vagrantfile

如何使 Vagrantfile 将文件内容附加到 ~/.bashrc 文件?

在我的 Vagrantfile 中,我尝试将文件 /vagrant/dev_env_config 的内容附加到 ~/.bashrc 文件中。

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

但是,当我运行vagrant ssh并且cat ~/.bashrc~/.bashrc 文件未修改时,它是默认的 ~/.bashrc 文件

换句话说, ~/.bashrc 文件的 mods 在 vagrant provison 运行和我运行之间的某个地方丢失了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
Run Code Online (Sandbox Code Playgroud)

Bri*_*anC 6

我认为发生的情况是配置脚本以 root(或 sudo)身份运行,因此“~”主位置实际上是 /root 而不是默认用户主位置 /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
Run Code Online (Sandbox Code Playgroud)

第二个选项可能是以非特权用户身份运行这部分配置脚本。请参阅Shell 脚本文档页面上的“特权”选项。