[UNIX] 환경변수의 설정

Solaris 2006. 2. 21. 17:00 posted by CecilDeSK
반응형
프로그램이나 쉘 스크립트에서 {환경변수를 설정하고, 디렉토리를 변경하는것}을 하
는 방법은? 그리고 그러한 것이 현재의 쉘에 어떠한 영향을 줄 수 있는가?

일반적으로, 적어도 특별한 준비 없이그것은 불가능하다. 자식 프로세스가 생성되면
그것은 부모의 변수와 현재 디렉토리를 상속 받는다. 자식 프로세스는 이들 모든 값을
변경할 수 있다. 그러나 그 변화가 부모 쉘에는 영향을 미치지 않는다. 왜냐하면 자식은
원래의 데이터의 복사본을 변경한 것이기 때문이다.

몇몇 특별한 준비가 가능하다. 만약 부보가 그 출력물을 읽고 그것을 부모 자신의
변수를 변경하는 명령으로 해석 할 수 있다면 여러분의 자식 프로세스는 변경된 변수를
써 보낼 수 있다.

또한, 쉘은 자식 프로세스에서가 아니라 현재의 쉘 context에서 다른 쉘 스크립트를
실행하기 위해 준비될 수 있다. 이렇게 되면 그 변화는 원래의 쉘에 영향을 미칠 수 있다.

예를 들어, 만약 여러분의 "myscript"라는 이름의 C 쉘 스크립트를 가지고 있다고 하면:

cd /very/long/path
setenv PATH /something:/something-else

또는 같은 Bourne 또는 Korn쉘 스크립트인 다음을 가지고 있다고 하면

cd /very/long/path
PATH=/something:/something-else export PATH

그리고 myscript를 여러분의 쉘에서 실행하면 여러분의 쉘은 fork하고나서
그 스크립트를 서브프로세스에서 실행할 것이다. 그 서브프로세스는 또한 그 쉘을
실행하고 있다; "cd"명령이 보여질 때 그것은 그 자신의 현재 디렉토리를 바꾸고
"setenv"명령을 만나게 되면 그 자신의 환경변수를 바꾸게 된다. 그러나 둘다
여러분이 타이핑 하고 있는 그 쉘(말하자만 여러분이 쓰고 있는 login쉘)의 현재
디렉토리에는 영향을 주지는 않는다.

fork없이 그 스크립트를 실행하기 위해 로그인쉘을 얻기 위해서는 여러분은
"." 명령이나(Bourne이나 Korn쉘에서) 또는 "source"명령(C쉘에서)을 사용해야 한다.
예를 들어 다음과 같이 타이핑 한다.

. myscript

위는 Bourne 이나 Korn 쉘에서 하는 것이고 C쉘에서는

source myscript

과 같이 한다.

만약 여러분이 하고자 하는 일이 단지 디렉토리나 환경변수를 변경하려는 것이라면
C쉘의 shell alias나 Bourne/Korn쉘의 쉘함수를 사용하면 간단하다.
"프롬프트에 현재 디렉토리명을 넣으려면?" 섹션을 보면 몇몇 예제가 있다.

xtm@telelogic.se(Thomas Michanek)에 의한 더 자세한 답변이 다음에 있다.
ftp.wg.omron.co.jp in /pub/unix-faq/docs/script-vs-env

반응형