2005년 5월 31일 화요일

Windows Environment Variables

윈도우 시스템에 설정된 여러 값들(예로 들면 시스템 폴더 등)을 얻기 위해서 쓸 수 있는 방법으로 윈도우즈 환경 변수를 들 수 있겠습니다. (자바에서 제공되지 않는 값이라고 가정하구요.)

다음은 윈도우에서 사용할 수 있는 대표적인 환경 변수 목록입니다.

출처 : http://www.wilsonmar.com/1envvars.htm


환경 변수를 사용하는 방법은 간단합니다. 다음과 같이 'echo'명령어를 사용하면 가능하며, 대소문자 구분하지 않습니다.


주의할 점은 Process를 생성해서 runtime.exec()를 사용해서 명령어를 그대로 실행할 수는 없다는 점입니다. 윈도우의 경우에는 배치파일로 리눅스의 경우에는 쉘을 사용하여 실행하여야지만 가능합니다.

댓글 3개:

  1. 'echo'는 내부명령어 이기 때문에 동작하지 않는것 입니다. unix에서는 내부명령어가 없기 때문에(있나?) 그런 문제가 없을겁니다.

    하지만 윈도우에서도 내부명령어 실행기라 할수 있는 cmd.exe를 실행하면 배치화일 안 만들어도 가능합니다. 이걸 실행해 보세요. 'cmd /C echo %PATH%'

    아. 그리고 Java 5에서는 환경변수를 읽어오는 메소드가 부활한 걸로 아는데 한번 알아 보세요.

    그리고 cmd를 그냥 실행해도 standard input에 내용을 넣어주어 내부명령어를 실행 할 수 있습니다.

    답글삭제
  2. 좋은정보감사합니다. ^^ 근데, 한컴리눅스에서는 echo 명령이 바로 안되어서 sh로 돌려야지만 되더군요. java5는 한번 알아봐야겠네요 ^^

    답글삭제
  3. 유닉스는 내부 동작 원리에 따라 꼭 쉘 내부 명령어이어야만 하는 경우가 아니라면 모두 외부 프로그램으로 빠져있다고 보면 될 것입니다.



    이러한 이유로 cd 같은 명령은 현재 프로세스 (쉘)의 current working directory를 변경시키는 것이므로 내부 명령입니다.



    echo 프로그램으로 환경 변수를 출력하는 경우에 자주 사용하는 데 본래 목적은 순수하게 주어진 인자를 화면에 출력하는 것에 불과합니다.

    그래서, 외부 프로그램입니다.

    그러나, 쉘에서 $TERM과 같은 인자를 사용하게 되면 그 명령이 echo이든 ls이든 쉘 인터프리터가 해석하여 $가 붙은 경우 현재 쉘의 환경변수 확장 기능을 통하여 대치됩니다.

    따라서, echo를 사용하여 환경 변수를 출력하는 것은 실제로는 echo가 해준것이 아니라 echo를 실행시켜주는 환경이 쉘이 해준 것입니다.

    그래서, 비록 echo가 독립 프로그램이더라도 echo로 환경 변수 출력을 위해서는 쉘을 실행시키고 echo를 인자로 주어서 처리해주어야 하는 것입니다.



    가장 좋은 방법은 유겸애비 말대로 자바5에서 환경 변수 접근 기능을 다시 제공하기 때문에 문제가 없을 것입니다.

    답글삭제