POSIX-совместимый способ увидеть, определена ли функция в скрипте sh

м после правильного способа увидеть, определена функция или нет. POSIX-совместимый способ.

__function_defined() {
    FUNC_NAME=$1
    d=$(declare -f $FUNCNAME)

    if [ "${DISTRO_NAME_L}" = "centos" ]; then
        if typeset -f $FUNC_NAME &>/dev/null ; then
            echo " * INFO: Found function $FUNC_NAME"
            return 0
        fi

    # Try POSIXLY_CORRECT or not
    elif test -n "${POSIXLY_CORRECT+yes}"; then
        if typeset -f ${FUNC_NAME} >/dev/null 2>&1 ; then
            echo " * INFO: Found function $FUNC_NAME"
            return 0
        fi
    else
        # Arch linux seems to fall here
        if $( type ${FUNC_NAME}  >/dev/null 2>&1 ) ; then
            echo " * INFO: Found function $FUNC_NAME"
            return 0
        fi
    echo " * INFO: $FUNC_NAME not found...."
    return 1
}

Все вышеперечисленное считается башомизмы в соответствии с Debiancheckbashisms скрипт.

Попытка grep сценария тоже не в порядке. например:

    if [ "$(grep $FUNC_NAME $(dirname $0)/$(basename $0))x" != "x" ]; then
        # This is really ugly and counter producing but it was, so far, the
        # only way we could have a POSIX compliant method to find if a function
        # is defined within this script.
        echo " * INFO: Found function $FUNC_NAME"
        return 0
    fi

победил't работает, потому что скрипт также должен работать так:

wget --no-check-certificate -O - http://URL_TO_SCRIPT | sudo sh

И что'правильный, POSIX-совместимый способ сделать это?

Пожалуйста, просто sh, без bash, без ksh, без других оболочек, просто sh. Да, и на самом деле не пытаясь запустить функцию тоже :)

Является ли это возможным?

Я нашел POSIX-совместимое решение:
if [ "$(command -v $FUNC_NAME)x" != "x" ]; then
    echo " * INFO: Found function $FUNC_NAME"
    return 0
fi

Вопрос сейчасЕсть ли лучшее решение?

Ответы на вопрос(2)

Ваш ответ на вопрос