Vagrant 配置脚本:echo "source /root/.venvburrito/startup.sh" >> ~/.profile 失败

Vagrant 配置脚本:echo "source /root/.venvburrito/startup.sh" >> ~/.profile 失败

我正在用引导程序脚本。除了一行之外,该脚本运行正常:

echo "source /root/.venvburrito/startup.sh" >> ~/.profile

此行失败。我没有得到任何有关它的输出,但是当我得到vagrant ssh并检查~/.profile文件时,我可以看到它source /root/.venvburrito/startup.sh没有附加到文件中。

我如何才能将命令附加source /root/.venvburrito/startup.sh到文件以便每次执行时都能获取该命令vagrant ssh

答案1

shell (和大多数其他) 配置程序以 root 用户身份运行sudo。但对于 shell 配置程序,您可以将privileged属性设置为false以 SSH 用户身份运行。

例子:

Vagrant.configure("2") do |config|
  # ...

  config.vm.provision "shell", path: "bootstrap.sh", privileged: false
end

文件更多细节。

答案2

运行脚本vagrant provision

#whoami
root
#echo $HOME
/root

与跑步相比vagrant ssh

#whoami
vagrant
#echo $HOME
/home/vagrant

换句话说,当我使用 时~/.profile,在配置脚本中会~扩展为/root,而当我通过 sssh 进入虚拟盒后使用它时,它会扩展为/home/vagrant

因此,为了将该行附加到~/.profile可以通过 ssh 访问的文件中,您需要在配置脚本中添加以下行:

echo "source /root/.venvburrito/startup.sh" >> /home/vagrant/.profile

如果您使用,printenv您可以看到所有环境变量设置。这表明您还可以使用:

echo "source /root/.venvburrito/startup.sh" >> $PWD/.profile

答案3

我也遇到了同样的情况。然后我在阅读@tmatilai 的评论后意识到它实际上已经为 root 用户设置了它!

你可以做

sudo su -

到达 root 权限。然后你会看到你的行被添加到文件(在 /root/.profile 中)

此外,您可以改用完全限定名称,而不是按照他的建议设置权限:

echo "source /root/.venvburrito/startup.sh" >> /home/vagrant/.profile

相关内容