端末以外の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

これがスクリプトの関数のない部分でスクリプトを取得した場合、関数がゼロ以外の終了コードを返すと、制御はシェルに返されます。

関連情報