우분투에서 환경변수 저장 LINUX

유닉스에서 환경변수값을 저장하는 위치는 참 많다. 전통적인 .rc , .profile 부터 .bashrc, .bash_profile , /etc/profile 등등... 너무 다양하고 시스템에 따라 쉘에만 먹혀서 그래픽 데스크탑에는 적용이 안 되기도 한다. 젠투때도 gnome세션에서 환경변수값이 안 들어가 삽질했던 기억이 난다.

우분투에서 환경변수를 어디에 저장하는 것이 좋을까? 검색어를 제대로 넣고 검색해보니 공식 안내 페이지가 있었다.
https://help.ubuntu.com/community/EnvironmentVariables#Persistent%20environment%20variables

요약하자면 사용자용 환경변수는 ~/.pam_environment 파일에 저장하고, 시스템 전체에 적용할 환경변수는 /etc/environment 파일에 저장하라는 것이다.  두 파일은 .bashrc나 .profile과는 달리 쉘스크립트가 아니라서 export명령을 빼고 쓴다는 것만 염두해두자. 그런데 이러면 조건문도 못 쓰지 않나!

보충 설명을 하자면
.profile이나 .bash_profile은 로그인쉘에서만 동작해서 일반 쉘 열 때는 안 먹히고 (하지만 보통 다른 쉘은 로그인 쉘 상태에서 자식으로 열려서 환경변수 값이 전파되기는 한다), 더 큰 문제는 그래픽 세션에는 값이 안 들어간다는 점이다. 여기에 설정한 값이 그놈 세션에 적용이 안 되서 실행 프로그램이 그 값을 못 가져온다.

.bashrc는 비 로그인 쉘로 실행될 때 실행된다고 한다. 거꾸로 말하면 로그인 쉘에서는 실행이 안 된다! 그래서 수많은 .bash_profile 샘플들을 보면 if [ -f ~/.bashrc ]; then . ~/.bashr 같은 내용이 들어있는 것이었다. 이 파일은 이름 자체가 bash로 시작하기 때문에 꼭 bash쉘을 열 때만 실행될 것 같은데, 설명을 보니 DisplayManager도 열기 때문에 세션에도 적용된다고는 나와있다. 다만 쉘 열 때마다 실행되기 때문에 성능을 생각하면 여기에 되도록 넣지 말라는 이야기다.


그런데, 애초에 이것을 조사하게 된 이유가 GDK_NATIVE_WINDOWS 라는 환경변수 때문이었다. 이전버젼은 잘 모르겠는데, 우분투 9.10에서 이클립스같은 자바 기반 프로그램이 오동작을 하는 것이다. 알아보니 GDK_NATIVE_WINDOWS환경변수 값을 1로 설정하면 제대로 돌아간다고 해서 이것을 저장해 놨는데, 실제 그놈을 띄워보면 설정이 안 되는 것이다. 그래서 환경변수가 쉘에만 전파된 것이 아닌가해서 이런저런 파일로 삽질을 했는데 현재까지의 잠정결론은 gnome이 실행하면서 그 변수를 계속 지우는 것이었다.

이클립스 하나만 이러면 그냥 래퍼쉘 스크립트로 변수설정해서 실행시키면 되겠지만, 내가 쓸 자바기반 프로그램이 한두가지여야 말이지. 설치시간 줄이려고 젠투 버리고 우분투 갈아탄 것이 정말 잘한 걸까 하는 생각이 자주 든다.

덧글

댓글 입력 영역



메모장

W 위젯