Vagrant - 供应脚本不更改目录

问题描述 投票:1回答:1

新来的流浪汉,请帮忙!

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文件夹开始。

shell vagrant provisioning
1个回答
2
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.