나는 사용하고 싶다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
~에서자주 묻는 질문, 강조 내 :
.envrc
direnv는 현재 쉘에 로드되지 않습니다 . stdlib, direnvrc 를 로드.envrc
하고 환경 차이점을 원래 셸로 다시 내보내는 새로운 bash 하위 프로세스를 생성합니다 . 이를 통해 direnv는 환경 변화를 정확하게 기록할 수 있으며 다양한 쉘과 함께 사용할 수 있습니다. 이는 또한 별칭과 함수는 현재 내보낼 수 없습니다.
내보낸 함수를 사용하는 것도 export -f seqchart
아마 작동하지 않을 것입니다. 왜냐하면 bash는 내보낸 함수()와 동일한 형식으로 환경 변수를 설정하는 방법을 제공하지 않기 때문입니다 BASH_FUNC_foo%%
. 그리고 설령 그랬더라도 해당 변수만 읽을 수 있다고 생각합니다. 시작.