0

我正在运行安装脚本以在带有 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 时遇到同样的问题吗?

4

1 回答 1

1

非平凡的脚本必须专门编写才能与set -e.

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

以本节为例:

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

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

但是,当您启用 时set -e,如果变量为空,则脚本将退出,然后脚本才有机会查看它并对此进行解释。

gvm-init.sh除了重写或set +e在运行任何受影响的代码之前,您实际上无能为力。

于 2014-02-13T05:46:52.770 回答