【发布时间】:2014-07-13 12:48:06
【问题描述】:
尝试编写一个 shell 脚本以通过 Vagrant 在 Ubuntu 上设置我的服务器环境,但遇到了脚本意外结束的问题。我在 Vagrant 的配置选项中添加了 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)。有什么想法吗?
【问题讨论】:
-
脚本是否在当前用户的上下文中执行?脚本运行时,
~会不会指向别处?对于调试,将以下内容添加到您的脚本中并捕获其 stderr 输出:PS4='>$LINENO: '; set -xv