Zsh: export: não é válido neste contexto

3

Ao executar este script , me deparo com um erro em esta linha (fragmento relevante abaixo):

...
_NEW_PATH=$("$_THIS_DIR/conda" ..activate "$@")
if (( $? == 0 )); then
    export PATH=$_NEW_PATH
    # If the string contains / it's a path
    if [[ "$@" == */* ]]; then
        export CONDA_DEFAULT_ENV=$(get_abs_filename "$@")
    else
        export CONDA_DEFAULT_ENV="$@"
    fi

    # ==== The next line returns an error 
    # ==== with the message: "export: not valid in this context /Users/avazquez/anaconda3"
    export CONDA_ENV_PATH=$(get_dirname $_THIS_DIR)

    if (( $("$_THIS_DIR/conda" ..changeps1) ));  then
            CONDA_OLD_PS1="$PS1"
            PS1="($CONDA_DEFAULT_ENV)$PS1"
    fi
else
    return $?
fi
...

Por que isso? Eu encontrei este ticket , mas eu não tenho isso erro de sintaxe.

Encontrei relatos do mesmo problema em encadeamentos do GitHub (por exemplo, aqui ) e listas de discussão (por exemplo, aqui )

    
por Amelio Vazquez-Reina 10.06.2015 / 04:11

2 respostas

5

Em zsh, Substituição de Comando , o resultado foi dividido, se não fosse incluído aspas duplas. Portanto, se o seu resultado de substituição de comando contiver qualquer espaço em branco, tabulação ou nova linha, o comando de exportação será dividido em partes:

$ export a=$(echo 1 -2)
export: not valid in this context: -2

Você precisa duplicar a substituição do comando para fazer isso funcionar ou usar a sintaxe mais segura:

PATH=$_NEW_PATH; export PATH

ou até mesmo:

PATH=$_NEW_PATH export PATH
    
por 10.06.2015 / 06:06
3

Acho que entendi, para a conformidade POSIX eu preciso de aspas duplas aqui. O seguinte corrigiu.

export CONDA_ENV_PATH="$(get_dirname "$_THIS_DIR")"

O excelente artigo a seguir pode ser útil:

por 10.06.2015 / 04:22