터미널이 아닌 bash 기능을 종료하십시오.

터미널이 아닌 bash 기능을 종료하십시오.

아래와 같이 사육사를 설치하는 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

TL;DR

returnAND 대신 aka를 사용하여 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이 아닌 종료 코드를 반환하면 제어를 셸로 반환합니다.

관련 정보