如果可能的话,我很难弄清楚如何从更高的函数返回,让我向您展示POSIX代码提示:
sudoedit_err ()
{
printf >&2 'Error in sudoedit_run():\n'
printf >&2 '%b\n' "$@"
}
sudoedit_run ()
{
# `sudoedit` is part of `sudo`'s edit feature
if ! command -v sudo > /dev/null 2>&1; then
sudoedit_err "'sudo' is required by this script."
return 1
fi
# primary non-empty arguments check
if ! { [ $# -ge 3 ] && [ -n "$1" ] && [ -n "$2" ] && [ -n "$3" ]; } then
sudoedit_err "Low number of arguments.\\nExpected: \$1 = editor type; \$2 = editor name; \$3, (\$4), ... = file(s).\\nPassed $#: $*"
return 1
fi
...重要说明首先:
.bash_aliases文件=,该文件实际上是由我的.bashrc提供的。sudoedit_err能够直接返回,这是我做不到的,我很确定我错过了一个POSIX脚本的类。️我发现的是:
exit 1代替return 1 =,它会退出终端。发布于 2020-11-08 02:22:57
有几个人提出了一个子壳,我认为这是个好主意。使用它,您可以引入一个包装器函数,该函数在子subshell中调用第二个函数。这样,第二个函数调用的任何函数都可以调用exit来终止子subshell。
下面是一个基于您的原始帖子的示例:
sudoedit_err() {
printf >&2 'Error in sudoedit_run():\n'
printf >&2 '%b\n' "$@"
exit 1
}
_sudoedit_run() {
# `sudoedit` is part of `sudo`'s edit feature
if ! command -v sudo > /dev/null 2>&1; then
sudoedit_err "'sudo' is required by this script."
fi
# primary non-empty arguments check
if ! { [ $# -ge 3 ] && [ -n "$1" ] && [ -n "$2" ] && [ -n "$3" ]; } then
sudoedit_err "Low number of arguments.\\nExpected: \$1 = editor type; \$2 = editor name; \$3, (\$4), ... = file(s).\\nPassed $#: $*"
fi
}
sudoedit_run()
{
(_sudoedit_run "$@")
}您可能不想直接调用包装好的函数,因为那样会终止shell。
https://unix.stackexchange.com/questions/618484
复制相似问题