Vagrant - 供应脚本不更改目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vagrant - 供应脚本不更改目录相关的知识,希望对你有一定的参考价值。

新来的流浪汉,请帮忙!

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "laravel/homestead"
  config.vm.provision "shell", path: "vm-setup/provision.sh"
end

VM-建立/ provision.sh

# Update apt-get
apt-get -y update

# Install tree
apt-get install tree

# Create .bash_aliases
sudo echo 'alias cls="clear"' >> ~/.bash_aliases

sudo chsh -s $(which zsh) vagrant

cd /vagrant

provision.sh文件运行正常。当我运行“vagrant provision”时,它会更新apt-get,安装树甚至将shell更改为ZSH。

sudo echo 'alias cls="clear"' >> ~/.bash_aliasescd /vagrant线不起作用,不知道为什么。当我vagrant ssh进入机器,我被带到根目录(/home/vagrant)。我想从/vagrant文件夹开始。

答案

Vagrant's shell provisioner默认使用privileged = true运行:

privileged(boolean) - 指定是否以特权用户身份执行shell脚本(sudo)。默认情况下,这是“true”。

当您执行vagrant ssh时,您将以vagrant用户身份登录VM。

这就是为什么:

1.

# Create .bash_aliases
sudo echo 'alias cls="clear"' >> ~/.bash_aliases

它写入root's~ / .bash_aliases,它确实存在:

root@vagrant:~# id
uid=0(root) gid=0(root) groups=0(root)
root@vagrant:~# cat .bash_aliases 
alias cls="clear"

解决方案:写入vagrant's主文件夹:

# Create .bash_aliases
echo 'alias cls="clear"' >> /home/vagrant/.bash_aliases
chown vagrant:vagrant /home/vagrant/.bash_aliases

2.

cd /vagrant

这意味着在配置脚本中更改了文件夹,没有别的。

解决方案:将此语句添加到vagrant's .bash_aliases

echo 'cd vagrant' >> /home/vagrant/.bash_aliases

你最后的vm-setup/provision.sh是:

# Update apt-get
apt-get -y update

# Install tree
apt-get install tree

# Create .bash_aliases
echo 'alias cls="clear"' >> /home/vagrant/.bash_aliases
echo 'cd /vagrant' >> /home/vagrant/.bash_aliases
chown vagrant:vagrant /home/vagrant/.bash_aliases

chsh -s $(which zsh) vagrant

以上是关于Vagrant - 供应脚本不更改目录的主要内容,如果未能解决你的问题,请参考以下文章

随着vagrant-berkshelf被弃用,是否有可能从Vagrant驱动构建,而Chef只作为供应者?

将单个文件从主机复制到 Vagrant 来宾的最简单方法?

vagrant网站中box下载方法

常用python日期日志获取内容循环的代码片段

方向更改时不可见的片段

当主机更改源时,grunt karma 对 vagrant 进行测试 grunt/karma 未检测到它