如何让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
答案 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 ...
而是。在我看来,这是一个更清洁的解决方案。因为实际上我们不应该使用sudo
(root
)权限。