尝试编写一个 shell 脚本来通过 Vagrant 在 Ubuntu 上设置我的服务器环境,但遇到了脚本意外结束的问题。我在 Vagrant 的配置配置选项中添加了 shell 脚本的路径。
Vagrant :
# 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
用户身份运行:它以 root
身份运行。
如果您想以 vagrant
用户身份运行脚本,您需要 privileged: false
。
config.vm.provision :shell, privileged: false, path: "scripts/bootstrap.sh"
正如 mklement0 所说:使用 set -xv
来调试您的配置脚本。
如果您想以其他用户身份运行,请不要忘记 su 用户
不会工作:How do I use su to execute the rest of the bash script as that user?
关于shell - 为 Vagrant 设置设置 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23841427/