2015년 2월 26일 목요일

쉘 스크립트끼리 변수 공유하기

쉘 스크립트끼리 변수 공유하기

  • a.sh
    #a.sh
    #!/bin/sh
    MESSAGE="hello"
    export MESSAGE
    ./b.sh
    
  • b.sh
    #!/bin/sh
    echo "The message is: $MESSAGE"
    
  • 하게 되면 환경변수가 복사되어 자식 프로세스에서 “The message is: hello” 가 나온다.
  • 하지만 거꾸로 하게 되면 나오지 않는다
    #a.sh
    #!/bin/sh
    echo "The message is: $MESSAGE"
    ./b.sh
    
  • b.sh
    #!/bin/sh
    MESSAGE="hello"
    export MESSAGE
    
  • 하게 되면 “The message is: “ 가 나온다.
  • 왜? 그럴까? 부모가 자식을 호출하게 되면 환경변수를 복사해가서 생성 한다.
    그후 어떤 방법으로도 부모의 환경변수에 접근 할수 없다.
    부모와 자식은 서로 다른 프로세스 임으로 최초 복사를 제외 하고는 환경 변수를 공유 할수 없다.
    또한 쉘프로그램이 종료되면 그 쉘에 만들어 졌던 모든 쉘 변수들을 없어진다.

쉘의 서브 스크립트는 어떻게 작동할까?

  1. 동일 프로세스에서 뛰우기
     . ./b.sh
     (soruce) /path/to/script
    
    모두 부모 프로세스에서 차례 차례 실행됨으로 변수와 함수가 공유 가능하다.
    • a.sh
      #!/bin/sh
      a="1"
      . ./b.sh
      
    • b.sh
      #!/bin/sh
      echo "The message is: $a"
      
    • 결과 The message is: 1
  2. 다른 프로세스로 뛰우기
     ./b.sh
     /bin/bash /path/to/script
    
    • 다른 프로세스로 뛰우기 때문에 서로 변수와 함수를 공유 할수 없다.

참고