我正在运行安装脚本,以便在装有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吗?
答案 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.sh
或set +e
之外,您无法做任何事情。