Vagrant 为什么';流浪者供给者修改~/.bashrc?

Vagrant 为什么';流浪者供给者修改~/.bashrc?,vagrant,vagrantfile,Vagrant,Vagrantfile,如何使Vagrantfile将文件内容附加到~/.bashrc文件 在我的vagrant文件中,我试图将/vagrant/dev_env_config文件的内容附加到~/.bashrc文件中 当我运行vagrant up时,它输出echo语句,并输出~/.bashrc文件的预期内容。。。。所以我知道它正在读取dev_env_config文件,并且似乎在附加它 但是,当我运行vagrant ssh然后运行cat~/.bashrc时,~/.bashrc文件未被修改,它是默认的~/.bashrc文件

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

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

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

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

换句话说~/.bashrc文件的mods在vagrant provision运行和我运行
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
#文件
Vagrant.configure(“2”)do | config|
... 要设置机箱和网络的各种CMD。。。
$install\u user\u vars=~/.bashrc
echo“***这是.bashrc文件:”
cat~/.bashrc
剧本
config.vm.provision“shell”,内联:$install\u user\u vars
结束

我认为现在的情况是,配置脚本以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
#文件
Vagrant.configure(“2”)do | config|
... 要设置机箱和网络的各种CMD。。。
$install\u user\u vars=/home/vagrant/.bashrc
echo“***这是.bashrc文件:”
cat/home/vagrant/.bashrc
剧本
config.vm.provision“shell”,内联:$install\u user\u vars
结束

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

基本解决方案是显式地将路径设置为
.bashrc
。通常SSH用户的默认用户名(将用于
vagrant SSH
操作)为
vagrant
so:

$install_user_vars = <<SCRIPT
      sudo cat /vagrant/dev_env_config  >> /home/vagrant/.bashrc
      echo "*** here is the .bashrc file:"
      cat /home/vagrant/.bashrc
SCRIPT
$install\u user\u vars=/home/vagrant/.bashrc
echo“***这是.bashrc文件:”
cat/home/vagrant/.bashrc
剧本
另外,我不确定是否有必要使用
sudo
命令(在
sudo cat…
中)。您可能不需要它,但它取决于运行配置脚本所使用的用户。我猜这也是流浪汉


因此,如果它真的是一个
流浪者
,您可以不修改
.bashrc
的路径(
~/.bashrc
),但必须删除
sudo cat…
命令并使用简单的
cat…
。在我看来,这是一个更干净的解决方案。因为实际上我们不应该在没有需要的情况下使用
sudo
root
)权限。

宾果,使路径显式工作非常完美,谢谢!在本例中,使用/home/vagrant/.bashrc重新接收~/.bashrc的所有实例