모든 환경 변수를 파일에 저장

모든 환경 변수를 파일에 저장

환경 변수가 포함된 단일 파일을 사용할 때 고려해야 할 사항은 무엇입니까?

내가 원하는 것은 ~/.env필요한 모든 선언과 및 및 PATH같은 기타 비기밀 환경 변수를 포함하는 파일(예: )을 생성하는 것입니다 . 해당 파일은 각 쉘별 도트 파일에서 유래됩니다.EDITORGOPATH

특히 다음 줄을 포함하고 싶습니다.

    . "$HOME/.env"

모든 ,,,,,,.profile.bash_profile.bashrc.zprofile.zshenv.zshrc

목표는 대화형/비대화형 및 로그인/비로그인 쉘에서 실행되는 명령의 일관된 동작입니다.

나는 왜 이것을 하고 싶지 않을까? 결과적으로 문제가 생길까요?


SE에서 이 주제와 관련된 많은 답변을 읽었습니다.

https://superuser.com/a/187673/924981
https://askubuntu.com/a/540689
https://askubuntu.com/a/866240
https://stackoverflow.com/q/14637979/3885799

env 선언에 대한 몇 가지 권장 사례를 이해합니다. 그러나 위의 방법도 수용 가능하고 안전한지 알고 싶습니다.

답변1

유일한 문제는 및 에서 파일을 가져오고 이 두 개가 서로 파일을 가져오는 경우(다른 셸에서도 마찬가지) 셸 세션을 시작할 때 환경 파일을 여러 번(두 번) 얻을 수 있다는 것 .bash_profile입니다 .bashrc.

당신이 아니라면 이것은 문제가되지 않습니다추가의/접두사환경 변수의 값입니다.

env_sourced쉘 변수(예: 파일의 일부 값)를 설정한 다음 맨 위에서 테스트하여 이를 방지할 수 있습니다.

# My environment file

[ -n "$env_sourced" ] && return
env_sourced=1

PATH="$PATH:/some/path"
# etc.

답변2

왜 이렇게 하면 안되는지 모르겠습니다. 예를 들어, 저는 bash/zsh 혼합 환경에서 작업합니다(예: 일부 터미널 창에서는 bash를 사용하고 일부에서는 zsh를 사용합니다). .bashrc 및 .zshrc에서 가져온 공통 파일에 두 언어와 구문적으로 호환되는 이러한 정의(환경 변수, 내보내지 않은 변수, 셸 함수)를 넣었습니다.

관련 정보