gpt4 book ai didi

python - 在 Vagrant 配置期间更新 .bashrc 和环境变量

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:53 25 4
gpt4 key购买 nike

我正在使用 Vagrant 设置一个包含 python、pip、virtualenv、virtualenvwrapper 和一些要求的盒子。供应 shell 脚本添加 the required lines for virtualenvwrapper.bashrc。它会进行非常基本的检查以确保它们不存在,因此它不会在每个条款中重复它们:

if ! grep -Fq "WORKON_HOME" /home/vagrant/.bashrc; then
echo 'export WORKON_HOME=/home/vagrant/.virtualenvs' >> /home/vagrant/.bashrc
echo 'export PROJECT_HOME=/home/vagrant/Devel' >> /home/vagrant/.bashrc
echo 'source /usr/local/bin/virtualenvwrapper.sh' >> /home/vagrant/.bashrc

source /home/vagrant/.bashrc
fi

似乎工作正常;配置完成后,这些行位于 .bashrc 中,我可以通过 ssh 连接到盒子并使用 virtualenvwrapper。

但是,virtualenvwrapper 在配置期间不起作用。在上面的部分之后,接下来检查 pip 要求文件并尝试使用 virtualenvwrapper 安装:

if [[ -f /vagrant/requirements.txt ]]; then
mkvirtualenv 'myvirtualenv' -r /vagrant/requirements.txt
fi

但这会产生:

==> default: /tmp/vagrant-shell: line 50: mkvirtualenv: command not found

如果我尝试从该 shell 脚本回显 $WORKON_HOME,则不会出现任何内容。

为了让 virtualenvwrapper 能够运行,我缺少哪些可用的环境变量?

更新: 进一步的尝试......似乎做 source/home/vagrant/.bashrc 对我的 shell 脚本没有影响 - 我可以把 .bashrc 文件中回显 "hello" ,这在配置期间不会输出(但如果我运行 source/home/vagrant/.bashrc登录时。

我也在 shell 脚本中尝试过 su -c "source/home/vagrant/.bashrc"vagrant 但这并没有什么不同。

更新 2:删除了 $BASHRC_PATH 变量,该变量混淆了问题。

更新 3:another question 中我得到了为什么 source/home/vagrant/.bashrc 不起作用的答案:.bashrc 文件的第一部分阻止它在运行时执行任何操作“不是交互式的”。

最佳答案

Vagrant 脚本供应器将以 root 身份运行,因此它的主目录 (~) 将是/root。在您的脚本中,如果您定义 BASHRC_PATH=/home/vagrant,那么我相信您的步骤会起作用:附加到/home/vagrant/.bashrc,然后从中获取。

更新:

打破我之前的想法 ^^ 因为 BASHRC_PATH 已经正确设置。

作为替代方案,我们可以使用 .profile 或 .bash_profile。这是一个设置环境变量 FOO 的简化示例,使其在配置期间和 ssh 登录后可用:

Vagrant 文件

Vagrant.configure(2) do |config|
config.vm.box = "hashicorp/precise32"

$prov_script = <<SCRIPT
if ! grep -q "export FOO" /home/vagrant/.profile; then
sudo echo "export FOO=bar" >> /home/vagrant/.profile
echo "before source, FOO=$FOO"
source /home/vagrant/.profile
echo "after source, FOO=$FOO"
fi
SCRIPT

config.vm.provision "shell", inline: $prov_script
end

结果

$ vagrant up
...
==> default: Running provisioner: shell...
default: Running: inline script
==> default: before source, FOO=
==> default: after source, FOO=bar
$ vagrant ssh -c 'echo $FOO'
bar
$ vagrant ssh -c 'tail -n 1 ~/.profile'
export FOO=bar

关于python - 在 Vagrant 配置期间更新 .bashrc 和环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29569573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com