在bash脚本中运行时,GVM返回错误

时间:2014-02-13 03:29:41

标签: bash shell grails gvm

我正在运行安装脚本,以便在装有GVM的新计算机上安装Grails。

#!/bin/bash
set -e

source "/Users/mecca831/.gvm/bin/gvm-init.sh"

echo "Install grails"
gvm install grails 2.1.1

在这种情况下,GVM会返回1,这会破坏我的脚本。但是,如果删除set -e,脚本将起作用。它返回0并显示正确的提示。有人遇到同样的问题,试图用GVM安装Grails吗?

1 个答案:

答案 0 :(得分:1)

必须专门编写非平凡的脚本才能与set -e一起运行。

gvm-init.sh尚未编写允许此操作,并在启用时中断。

例如考虑this section

GVM_DETECT_HTML="$(echo "$GVM_RESPONSE" | tr '[:upper:]' '[:lower:]' | grep 'html')"
if [[ -n "$GVM_DETECT_HTML" ]]; then
    ...

无论如何,这不是好的或惯用的bash代码,但它本身就足够好了。它找到包含“html”的行,并将它们粘贴在变量中。然后它检查变量是否为空。

但是,当您启用set -e时,如果该变量为空,则在脚本有机会查看并考虑该变量之前,脚本将退出。

除了在运行任何受影响的代码之前重写gvm-init.shset +e之外,您无法做任何事情。