Zsh: 내보내기: 이 컨텍스트에서는 유효하지 않습니다.

Zsh: 내보내기: 이 컨텍스트에서는 유효하지 않습니다.

달리는 동안이 스크립트, 오류가 발생했습니다이 줄(관련 스니펫은 다음과 같습니다):

...
_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
...

왜 그런 겁니까? 내가 찾은이 티켓, 하지만 해당 구문 오류는 없습니다.

GitHub 스레드에서 동일한 문제에 대한 보고서를 찾았습니다(예:여기) 및 메일링 리스트(예:여기)

답변1

zsh에서는명령 대체큰따옴표로 묶지 않으면 결과에 대해 토큰화가 수행됩니다. 따라서 명령 대체 결과에 공백, 탭 또는 줄바꿈이 포함된 경우 내보내기 명령은 여러 부분으로 나뉩니다.

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

작동하려면 큰따옴표 명령 대체가 필요하거나 더 안전한 구문을 사용하십시오.

PATH=$_NEW_PATH; export PATH

심지어:

PATH=$_NEW_PATH export PATH

답변2

POSIX 규정을 준수하려면 여기서 큰따옴표를 사용해야 한다는 점을 이해한 것 같습니다. 다음은 이를 수정합니다.

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

다음의 훌륭한 기사가 도움이 될 수 있습니다.

답변3

zshrc에서 별칭으로 내보낼 변수 이름을 추가하는 것을 잊었을 때 이런 일이 발생했습니다.

잘못된

export /Library/Java/JavaVirtualMachines/ibm-semeru-openjdk-17.jdk/Contents/Home

좋아요:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/ibm-semeru-openjdk-17.jdk/Contents/Home

관련 정보