터미널이 아닌 bash 기능 종료

터미널이 아닌 bash 기능 종료

Zookeeper가 아직 설치되지 않은 경우 설치하는 다음과 같은 bash 스크립트가 있습니다.

##zookeper
installZook(){

        ZOOK_VERSION="3.4.5"
        ZOOK_TOOL="zookeeper-${ZOOK_VERSION}"
        ZOOK_DOWNLOAD_URL="http://www.us.apache.org/dist/zookeeper/${ZOOK_TOOL}/${ZOOK_TOOL}.tar.gz"

        if [ -e $DEFAULT_INSTALLATION_DEST/${ZOOK_TOOL} ]; then
                echo "${ZOOK_TOOL} alreay installed";
                exit 1;      # <<<< here
        elif [ ! -e $DEFAULT_SOURCE_ROOT/${ZOOK_TOOL}.tar.gz ]; then
                wgetIt $ZOOK_DOWNLOAD_URL
        else
                echo "[info] : $DEFAULT_SOURCE_ROOT/$ZOOK_TOOL already exists"
        fi

        sudo mkdir -p /var/lib/zookeeper
        sudo mkdir -p /var/log/zookeeper

        tarIt "$DEFAULT_SOURCE_ROOT/$ZOOK_TOOL.tar.gz"
        sudo chmod 777 -R $DEFAULT_INSTALLATION_DEST/$ZOOK_TOOL
        cp $DEFAULT_INSTALLATION_DEST/$ZOOK_TOOL/conf/zoo_sample.cfg $DEFAULT_INSTALLATION_DEST/$ZOOK_TOOL/conf/zoo.cfg
cat >> ~/.bash_profile <<'EOF'

  ###############################
  ########### ZOOK ###############
  ###############################
  ZOOK_HOME=/usr/local/zookeper-3.4.5
  export ZOOK_HOME
  export PATH=$PATH:$ZOOK_HOME/bin

EOF
}

표시된 줄에서 <<<< here사육사가 이미 설치되어 있는 경우 내가 원하는 것은 그 아래의 스크립트를 종료하는 것입니다. 그러나 이를 사용하면 exit터미널 자체가 종료됩니다.

답변1

긴 이야기 짧게

대신 aka 를 return사용 exit하여 스크립트를 실행하세요 source your-script.sh.. your-script.sh

세부

명령문이 포함된 스크립트를 시작하는 경우 exit현재 하위 항목의 하위 항목으로 시작해야 합니다.

터미널 세션으로 시작된 현재 셸에서 시작하는 경우( . ./<scriptname>어떤 명령을 사용하면 exit기본 셸이 닫히고 셸은 터미널 세션으로 시작됩니다).

스크립트 bash ./<scriptname>(또는 대신 다른 쉘)를 실행하면세게 때리다), 그러면 exit터미널이 사용하는 쉘이 아닌 하위 쉘이 중지됩니다.

스크립트에 실행 권한이 있는 경우 쉘 이름을 지정하지 않고 직접 실행하면 하위 쉘에서도 실행됩니다.

return대신 사용하면 현재 셸을 닫지 않고도 exit스크립트를 시작할 수 있습니다 . 하지만 종료 전용 함수나 소스 스크립트(구문을 사용하여 실행되는 스크립트 ) . ./<script name>를 사용해야 합니다 .return. ./<scriptname>

답변2

exit 1를 사용하는 대신 return 1.

답변3

주어진 스크립트가 셸 세션(및 터미널)을 종료할 수 있는 유일한 방법은 스크립트를 얻은 다음( installZook현재 셸 세션에 함수 설치) 셸에서 함수를 실행하는 것입니다.

함수 호출이 포함된 더 큰 스크립트의 일부만 표시하는 경우에도 installZook함수는 스크립트가 다음과 같은 경우에만 터미널을 종료하게 합니다.원천, 그러나 일반 쉘 스크립트로 실행하는 것은 아닙니다.

exit현재 쉘 세션을 종료합니다. 함수가 실행되면 exit함수를 호출한 셸이 종료됩니다.

return함수(또는 소스 스크립트 파일)에서 반환됩니다. 대신 함수를 exit사용 하면 return종료하지 않고 호출 환경(아마도 함수를 호출한 대화형 셸)으로 제어권이 반환됩니다.

셸에서 함수를 수동으로 실행하는 경우 installZook에는 exit로 변경하기 return. 스크립트에 함수를 호출하는(표시하지 않는) 다른 코드가 있는 경우 해당 코드는 다음과 같이 해야 합니다.또한함수의 반환 상태에 반응합니다.

예를 들어

installZook || return

이것이 스크립트의 함수 없는 부분이고 스크립트를 얻은 경우, 함수가 0이 아닌 종료 코드를 반환하면 제어가 셸로 반환됩니다.

관련 정보