아래와 같이 사육사를 설치하는 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
return
AND 대신 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이 아닌 종료 코드를 반환하면 제어를 셸로 반환합니다.