.envrc에서 bash 기능을 만드는 방법은 무엇입니까?

.envrc에서 bash 기능을 만드는 방법은 무엇입니까?

나는 사용하고 싶다direnv특정 디렉토리로 전환하면 bash 기능을 자동으로 정의합니다. 이것이 함수 정의입니다.

seqchart () {
    # Create a sequence diagram creation shorthand
    f=$1
    target_f=${f%.*}.svg
    if [ -f "$f" ]; then
        diagrams sequence $f ${target_f}
        open -a firefox ${target_f}
    else
        echo "$0: No file specified"
    fi
}

위의 코드를 에 넣었습니다 .envrc.

폴더에 들어가면 cd보이는데

$ cd sequence_diagrams/
direnv: loading .envrc

그러나 bash 기능은 생성되지 않습니다.

모든 것을 함께 유지하면서 어떻게 이를 달성할 수 있습니까 .envrc?

답변1

~에서자주 묻는 질문, 강조 내 :

  1. .envrcdirenv는 현재 쉘에 로드되지 않습니다 . stdlib, direnvrc 를 로드 .envrc하고 환경 차이점을 원래 셸로 다시 내보내는 새로운 bash 하위 프로세스를 생성합니다 . 이를 통해 direnv는 환경 변화를 정확하게 기록할 수 있으며 다양한 쉘과 함께 사용할 수 있습니다. 이는 또한 별칭과 함수는 현재 내보낼 수 없습니다.

내보낸 함수를 사용하는 것도 export -f seqchart아마 작동하지 않을 것입니다. 왜냐하면 bash는 내보낸 함수()와 동일한 형식으로 환경 변수를 설정하는 방법을 제공하지 않기 때문입니다 BASH_FUNC_foo%%. 그리고 설령 그랬더라도 해당 변수만 읽을 수 있다고 생각합니다. 시작.

관련 정보