私は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
とマークされた行で、zookeeperがすでにインストールされている場合は、その下のスクリプトを終了します。ただし、exit
を使用すると、ターミナル自体が終了します。
return
の代わりにexit
を使用し、source your-script.sh
別名でスクリプトを実行します。 . your-script.sh
exit
ステートメントを含むスクリプトを起動する場合は、現在の子の子として起動する必要があります。
ターミナルセッションで開始された現在のシェル内で起動する場合(. ./<scriptname>
を使用すると、exit
はターミナルセッションで開始されたメインシェルを閉じます。
bash ./<scriptname>
(またはbashの代わりに他のシェル)のようなスクリプトを起動した場合、exit
は、端末で使用されているシェルではなく、子シェルを停止します。 。
スクリプトに実行権限がある場合、シェルの名前を指定せずに直接実行すると、子シェルでも実行されます。
return
の代わりにexit
を使用すると、現在のシェルを閉じなくても、. ./<script name>
を使用してスクリプトを起動できます。ただし、関数のみまたはソーススクリプト(. ./<scriptname>
構文を使用して実行されたスクリプト)を終了するには、return
を使用する必要があります。
与えられたスクリプトがシェルセッション(つまりターミナル)を終了できる唯一の方法は、スクリプトをソースとして(現在のシェルセッションにinstallZook
関数をインストールするため)、次に関数を実行することです。シェル。
表示しているものがinstallZook
関数の呼び出しを含むより大きなスクリプトの一部のみである場合でも、スクリプトがsourcedの場合にのみ、関数は端末を終了させることができます。ただし、通常のシェルスクリプトとして実行することはできません。
exit
は、現在のシェルセッションを終了します。関数がexit
を実行すると、それを呼び出したシェルが終了します。
return
は、関数(またはソーススクリプトファイル)から戻ります。関数がexit
ではなくreturn
を使用した場合、関数を終了せずに制御を呼び出し環境(おそらく関数を呼び出した対話型シェル)に制御を戻します。
シェルからinstallZook
関数を手動で実行する場合は、exit
をreturn
に変更するだけです。スクリプトに関数を呼び出す別のコードがある場合(表示されていません)、そのコードは追加関数の戻りステータスに反応する必要があります。
例えば
installZook || return
これがスクリプト内の関数の一部ではなく、スクリプトを入手した場合、関数がゼロ以外の終了コードを返すと、制御がシェルに返されます。
exit 1
を使用する代わりに、return 1
を使用してみてください。