shell - 为 Vagrant 设置设置 Shell 脚本

标签 shell vagrant

尝试编写一个 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/

相关文章:

linux - ssh 中带有管道变量的 egrep 命令抛出 No Such File or Directory 错误

redis - capistrano成功启动redis-server,但登录时它没有运行

java - 导入mysql转储文件的shell脚本

mongodb - 无法连接到 Mlab

mysql - 目前 Ubuntu 上的 puppetlabs-mysql 模块有什么技巧吗?

ubuntu - 如何将 vagrant precise32 升级到更新版本?

vagrant - 在云实例中运行 virtualbox/vagrant

vagrant - 设备上没有剩余空间错误

linux - 在 shell 中执行函数之前检查函数是否存在

linux - 比较shell中的两个变量