(可能な場合)どのように(可能な場合)移動するのかを調べるには、いくつかの問題があります。高い関数の簡単な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
...
最初の重要な注意事項:
これらの関数は file = source から my シェルに直接移動し、
.bash_aliases
このファイルは.bashrc
my in Effective.私が望むのは直接返すことができるということです
sudoedit_err
。しかし、私はできません。 POSIXスクリプトクラスが欠落していると確信しています。
答え1
いくつかの人々がサブシェルの使用を提案していますが、私の考えではこれが良い考えだと思います。これにより、サブシェルから2番目の関数を呼び出すラッパー関数を導入できます。このようにして、2番目の関数から呼び出されるすべての関数を呼び出してexit
サブシェルを終了できます。
以下は、元の投稿に基づいた例です。
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 "$@")
}
ラップされた関数を直接呼び出すとシェルが終了するため、望ましくありません。