代码之家  ›  专栏  ›  技术社区  ›  sorin

如何停止bash脚本的执行,不管它是否用“source”调用?

  •  2
  • sorin  · 技术社区  · 7 年前

    此时脚本包含一个 exit 如果您正常调用脚本,这是可以的,但是如果您为它提供源代码,它也会停止执行不需要的调用脚本。

    如果我更换 用一个 return

    return: can only `return' from a function or sourced script
    

    我正在寻找一个解决方案,这两种情况下都适用。

    2 回复  |  直到 7 年前
        1
  •  2
  •   John Kugelman Michael Hodel    7 年前

    您可以将脚本的代码包装到一个函数中,然后 return 从。

    __main() {
        unset -f __main
    
        ...
        if whatever; then
            return
        fi
        ...
    }
    
    __main "$@"
    
        2
  •  1
  •   Charles Duffy    7 年前

    尝试 return exit 如果失败了。

    { retval=$?; return "$retval" 2>/dev/null || exit "$retval"; }
    

    测试如下:

    cat >one <<'EOF'
    #!/usr/bin/env bash
    echo "one starting"
    source two
    echo "one ending"
    EOF
    
    cat >two <<'EOF'
    #!/usr/bin/env bash
    echo "two starting"
    echo "two attempting to exit"
    { retval=$?; return "$retval" 2>/dev/null || exit "$retval"; }
    echo "two still running after attempted exit
    EOF
    
    source one
    

    one starting
    two starting
    two attempting to exit
    one ending
    

    …而不是跑步 chmod +x two; ./two

    two starting
    two attempting to exit
    
    推荐文章