Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何停止bash脚本的执行,无论它是否';s用“引用”;资料来源;?_Bash - Fatal编程技术网

如何停止bash脚本的执行,无论它是否';s用“引用”;资料来源;?

如何停止bash脚本的执行,无论它是否';s用“引用”;资料来源;?,bash,Bash,我正试图摆脱bash脚本中的退出调用,以使其可供源代码使用 此时,脚本包含一个退出,如果您正常调用脚本,该退出是正常的,但是如果您将其源代码化,它也将停止执行不需要的调用脚本 如果我用一个return替换exit,它在源代码时工作良好,但在未源代码时会失败并出错 return: can only `return' from a function or sourced script 我正在寻找一种解决这两种情况的方法。尝试返回,如果失败,返回到退出 { retval=$?; return "$r

我正试图摆脱bash脚本中的退出调用,以使其可供源代码使用

此时,脚本包含一个
退出
,如果您正常调用脚本,该退出是正常的,但是如果您将其源代码化,它也将停止执行不需要的调用脚本

如果我用一个
return
替换
exit
,它在源代码时工作良好,但在未源代码时会失败并出错

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

我正在寻找一种解决这两种情况的方法。

尝试
返回
,如果失败,返回到
退出

{ 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
…而运行
chmod+x2/两个
发射:

两次启动
两人试图退出

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

__main() {
    unset -f __main

    ...
    if whatever; then
        return
    fi
    ...
}

__main "$@"

相关:虽然这段代码很有意义,但在寻找函数源时,它似乎不起作用,结果是完全退出。我无法重现这种失败:如果我将它放在名为
test exit
的文件中并运行
bash-c'echo one。试验出口;echo two'
,输出中同时存在
one
two
。@sorin,…请参阅显示我使用的测试过程的附加说明。你会得到不同的结果吗?如果是,bash的哪个版本?Clear solution;另一种方法是相反的:只执行相关机构“如果不是什么”;它不需要包装器函数,但由于其他原因,它可能更复杂。