셸 스크립트 분석 - oe-init-build-env

1881 단어
oe-init-build-env
#!/usr/sh
if [ -z "$ZSH_NAME" ] && [ "x$0" = "x./oe-init-build-env" ]; then
   echo "Error: This script needs to be sourced. Please run as '. ./oe-init-build-env'"
else
   if [ -n "$BASH_SOURCE" ]; then
      OEROOT="`dirname $BASH_SOURCE`"
   else
      OEROOT="`pwd`"
   fi
   OEROOT=`readlink -f "$OEROOT"`
   export OEROOT
   . $OEROOT/scripts/oe-buildenv-internal && \
        $OEROOT/scripts/oe-setup-builddir && \
        [ -n "$BUILDDIR" ] && cd $BUILDDIR
   unset OEROOT
   unset BBPATH
fi

첫 번째, 이 스크립트가source 또는.의 방법으로 실행되었습니다.하지만
[ "x$0" = "x./oe-init-build-env" ]
맞습니다./oe-init-build-env 이런 실행 방식이 틀렸습니다. 맞습니다./yocto/oe-init-build-env는 틀리지 않습니다.
두 번째 단계에서 OEROOT 변수를 설정합니다.쓸모가 있다.또는 소스가 스크립트를 실행할 때 BASH_SOURCE 이 변수는 소스 파일 경로에 자동으로 설정됩니다.그래서 dirname $BASH_SOURCE는 스크립트가 있는 디렉토리를 가져옵니다.readlink -f $OEROOT는 절대 경로를 얻었습니다.
 
세 번째 단계는 oe-buildenv-internal과 oe-setup-builddir 두 스크립트를 실행하고build 디렉터리에 들어갑니다.
(여기 oe-buildenv-internal은 사용합니다. 실행된 것이고, oe-setup-build는 fork shell입니다. oe-setup-builddir에서 OEROOT라는 변수를 사용했기 때문에 그 전에 OEROOT는 스크립트에서 한 것처럼 export되어야 합니다.)
 
네 번째 단계, unset 변수.왜냐하면또는source의 실행 방식은 원 셸에서 실행되며 fork 셸이 아니기 때문에 unset이 없으면 이 셸에 계속 남아 있습니다.
 
chenqi@chenqi-laptop ~/MyPro/ShellScript/yocto $ . ./oe-init-build-env BASH_SOURCE = ./oe-init-build-env, OEROOT = . OEROOT =/home/chenqi/MyPro/ShellScript/yocto
 
chenqi@chenqi-laptop ~/MyPro/ShellScript $ source yocto/oe-init-build-env BASH_SOURCE = yocto/oe-init-build-env, OEROOT = yocto OEROOT =/home/chenqi/MyPro/ShellScript/yocto
 
어느 디렉터리에서 실행하든지 간에 마지막으로 얻은 OEROOT의 절대 경로는 일치한다는 것을 알 수 있다.BASH_SOURCE, dirname, readlink를 주로 사용합니다.
 
 

좋은 웹페이지 즐겨찾기