通过Puppet config.yaml或vagrant文件设置VM的$PATH?

通过Puppet config.yaml或vagrant文件设置VM的$PATH?,vagrant,puppet,vagrantfile,Vagrant,Puppet,Vagrantfile,我想通过使用puppet config.yaml或Vagrant文件或其他一些我不知道的VM外部机制,向我的VM的$path环境变量添加一个额外的路径 这可能吗?如果是这样的话,怎么办?在《流浪汉》中,你可以很容易地用一本书来准备东西。因此,首先,在与Vagrantfile相同的文件夹中创建一个脚本,为$path添加额外的路径。例如,创建一个名为bootstrap.sh的文件,其中包含以下内容: export PATH=$PATH:/foo/bar # Or if you want it for

我想通过使用puppet config.yaml或Vagrant文件或其他一些我不知道的VM外部机制,向我的VM的$path环境变量添加一个额外的路径


这可能吗?如果是这样的话,怎么办?

在《流浪汉》中,你可以很容易地用一本书来准备东西。因此,首先,在与Vagrantfile相同的文件夹中创建一个脚本,为$path添加额外的路径。例如,创建一个名为bootstrap.sh的文件,其中包含以下内容:

export PATH=$PATH:/foo/bar
# Or if you want it for all users :
echo 'PATH=$PATH:/foo/bar' >> /etc/profile
然后在您的文件中,添加以下行以在VM启动时执行此脚本:

config.vm.provision :shell, path: "bootstrap.sh"

这种方法在某种程度上是可行的,但如果出于某种原因,您在Vagrant box上重新运行了资源调配,那么每次运行资源调配时,您都会在其中找到一行。为了避免这种情况:

grep -s -E "PATH=\$PATH:/foo/bar" /etc/profile || echo 'PATH=\$PATH:/foo/bar' >> /etc/profile  

我对Chef了解不多,但Salt在创建此类文件中的托管部分并自行处理方面做得很好。如果Chef没有做同样的事情,我会感到惊讶。

PATH是一个每shell设置,因此它实际上取决于您想要做什么。在我将Vagrant文件行更改为:config.vm.provision:shell,:PATH=>bootstrap.sh之后,它起了作用。如果您希望将所有内容都放在Vagrant文件中,而不需要外部.sh文件,那么也可以使用设置