carrega o script através de uma função personalizada

1

Gostaria de carregar scripts por meio de um script que chamei de loader.sh .

#### Loader.sh
uload() {
    # ...
    if ! is_loaded $file
    then
        . "${file}" || exit 3

        if [[ ! -z "${callback}" ]]
        then
            "${callback}"
        fi
    fi
}

### log.sh
declare -r WARN=3

warn() {
    echo "${WARN}: $@" >&2
}

Caso de uso:

. "${loader.sh}"

uload "log.sh"

warn 'test'

Isso causa esse erro:

WARN: unbound variable

Por que estou recebendo esse erro?

    
por smarber 13.03.2018 / 10:37

2 respostas

0

Isto é sintomático para estes dois juntos:

  • a opção -u está sendo definida, o que faz com que variáveis não configuradas acionem o erro de unbound variable
  • a variável WARN não foi definida

Para confirmar ou excluir esta situação, faça:

  • verifique com echo $- se o sinalizador u estiver definido
  • experimente se você puder manualmente echo "$WARN" para ter certeza de que está definido ou depurado usando a opção x
por 13.03.2018 / 11:22
0

Eu descobri!

Quando substituir declare -r por readonly , não recebo mais o erro.

Using the declare builtin restricts the scope of a variable.

link

Então foi assim que eu consertei:

### log.sh
readonly WARN=3

warn() {
    echo "${WARN}: $@" >&2
}
    
por 13.03.2018 / 11:47