为Vagrant安装程序设置Shell脚本

为Vagrant安装程序设置Shell脚本,shell,vagrant,Shell,Vagrant,试图通过Vagrant编写一个shell脚本在Ubuntu上设置我的服务器环境,我遇到了一个问题,脚本意外结束。我在Vagrant的provision配置选项中添加了shell脚本的路径 流浪汉: # Specify our provision script config.vm.provision "shell", path: "scripts/bootstrap.sh" 我的剧本: #!/bin/bash # Install dependencies for Ruby sudo apt-g

试图通过Vagrant编写一个shell脚本在Ubuntu上设置我的服务器环境,我遇到了一个问题,脚本意外结束。我在Vagrant的provision配置选项中添加了shell脚本的路径

流浪汉:

# Specify our provision script
config.vm.provision "shell", path: "scripts/bootstrap.sh"
我的剧本:

#!/bin/bash

# Install dependencies for Ruby
sudo apt-get update
sudo apt-get install -y git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common

# Setting up rbenv
echo 'Setting up rbenv'
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
运行之后,我希望将存储库克隆到.rbenv文件夹中,并将rbenv添加到~/.bashrc中的$PATH中,同时计算rbenv init函数并将其放入~/.bashrc中。然而,当在Vagrant的供应步骤上执行脚本时,我最终得到的脚本只是克隆git存储库,然后终止,而不执行脚本中的任何其他内容

输出:

==> default: Processing triggers for libc-bin (2.19-0ubuntu6) ...
==> default: Setting up rbenv
==> default: Cloning into '.rbenv'...

然后脚本终止,~/.bashrc保持不变。我想知道如何更改我的shell脚本,使其能够执行我想要的操作(将rbenv添加到~/.bashrc)。有什么想法吗?

正如mklement0所说,脚本不是以
vagrant
用户的身份运行的:它是以
根用户的身份运行的

如果要以
vagrant
用户身份运行脚本,则需要
privileged:false

config.vm.provision :shell, privileged: false, path: "scripts/bootstrap.sh"
正如mklement0所说:使用set
-xv
调试您的配置脚本


如果您想以另一个用户的身份运行,请不要忘记
su-user
将不起作用:

如果您想执行一些脚本,如vagrant-user,请尝试以下操作

 su vagrant -l -c "echo Hello world"

脚本是否在当前用户的上下文中执行?脚本运行时,
~
是否指向其他位置?为了进行调试,请将以下内容添加到脚本并捕获其stderr输出:
PS4='>$LINENO:';set-xv