더 높은 기능에서 복귀하는 방법 - 가능하다면?

더 높은 기능에서 복귀하는 방법 - 가능하다면?

(가능한 경우) 어떻게 (가능한 경우) 이동하는지 알아내는 데 약간의 문제가 있습니다.더 높은함수에 대한 간단한 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이 파일은 .bashrcmy in Effective.

  • 내가 원하는 것은 직접 반환할 수 있다는 것입니다 sudoedit_err. 그러나 나는 할 수 없습니다. POSIX 스크립트 클래스가 누락되었다고 확신합니다.

답변1

여러 사람들이 서브쉘 사용을 제안했는데, 제 생각에는 이것이 좋은 생각이라고 생각합니다. 이를 사용하면 서브셸에서 두 번째 함수를 호출하는 래퍼 함수를 ​​도입할 수 있습니다. 이런 방식으로 두 번째 함수에서 호출되는 모든 함수를 호출하여 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 "$@")
}

래핑된 함수를 직접 호출하면 쉘이 종료되므로 원하지 않습니다.

관련 정보