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

GVM在bash脚本中运行时返回错误,bash,shell,grails,gvm,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时都会遇到同样的问题?必须专门编写非平凡脚本,才能使用

我正在运行一个安装脚本,以便在使用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时都会遇到同样的问题?

必须专门编写非平凡脚本,才能使用
set-e
运行

gvm init.sh
尚未写入以允许此操作,启用时会中断

例如,考虑:

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

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


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

如果
gvm
在成功操作后返回1,这是一个
gvm
错误。是的,但我想知道为什么它在没有
set-e
的情况下返回0。
set-e
是否也会传播到其他脚本中?试着说
gvminstall grails 2.1.1&&echo“exit code 0”| echo“non-zero exit code”
,这将帮助您了解退出代码返回的内容。
GVM_DETECT_HTML="$(echo "$GVM_RESPONSE" | tr '[:upper:]' '[:lower:]' | grep 'html')"
if [[ -n "$GVM_DETECT_HTML" ]]; then
    ...