当出口1代码放在某个随机位置时,Bash陷阱不运行

时间:2019-03-24 10:43:40

标签: bash bash-trap

我正在使用bash陷阱以确保不惜一切代价运行一个功能。我知道陷阱不是特定于exitO或1的。这是我所做的。

#!/bin/bash

set -e

#array to store server and deployed status
declare -A server_deployed


#path to file containing the server inventory 
    readonly filepath="/var/jenkins_home/workspace/server_list.txt"
    #array to store to list of IPS
    declare -A result #associative array

    if [[ $TARGET == "ALL" ]]; then
        while read line ; do
           server_name=` echo $line | cut -d= -f1 `
           result+=(["$server_name"]=${line#*=})
        done < $filepath
    else
       singleserver=`cat $filepath | grep "$TARGET"`
       server_name=`echo $singleserver| cut -d= -f1 ` # get the servername 
       serverip=`echo $singleserver| cut -d= -f2 ` # get tje server ip
       result+=(["$server_name"]=$serverip) # gets the ip which is after equalto
     fi


#function to send slack notification everytime
function sendMessage(){

    for sd in "${!server_deployed[@]}"
      do
        echo "#########################################################"
         echo "Sucecssfully deployed on $sd" 
         echo "#########################################################"
     done

   #let find the unsuccess list ,for which we need to find the array diff
   for server_name in "${!result[@]}"
     do
       for sd in "${!server_deployed[@]}"
         do
           if [[ "$server_name" != "$sd" ]]; then
             echo "Failed to deploy on $server_name"
           fi
        done
     done
}

trap "sendMessage" INT EXIT

for server in "${!result[@]}"
  do

    upstream="MBM-TEST-ADMIN-BUILD"
    #bundle filename
    bundle="mbm_admin_dist"

    name=$server
    instance=${result[$name]}

    #------copying the hash.php in build job to the deployed server home location
    # ssh and move to desired location
     sudo scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null /tmp/test/admin_hash.json ubuntu@$instance:/home/ubuntu/

    mbmcms_workspace="/var/jenkins_home/workspace/$upstream"
    cd $mbmcms_workspace


    #remove if exist
    if [ -e "$bundle.zip" ]
    then
        echo "Already Exist so Removing it First !!"
        rm -f  $bundle.zip
    fi

    #check if the dist folder exist that comes from successful build
    if [ ! -d "dist" ]; then
      echo "--------------------------------------------------------------"
      echo "The dist folder does not exist, Please run BUILD job First !!"
      echo "--------------------------------------------------------------"
      exit 1
    fi

    #zip the file from the TEST & Build jobs 
    echo "starting to zip mbm-admin dist file created after test and build success!!"
    zip --symlinks -x *.git* -r $bundle ./dist



    #---------------------------------------------------------------
    # copy development.php if non-production else copy production.php
    # the file goes to the view/cms/
    #---------------------------------------------------------------
    sudo scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null development.php ubuntu@$instance:/home/ubuntu
    sudo scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null production.php ubuntu@$instance:/home/ubuntu


    #copy the bundle file to instance
    scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -r $bundle.zip ubuntu@$instance:/home/ubuntu/


    ssh -tt -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@$instance '

    SOURCE_FOLDER='/home/ubuntu/mbm-admin/dist/'
    DESTINATION_FOLDER='/home/ubuntu/wpdata/plugins/manager/app/views/admin/admin_console/dist/'

    rm -rf mbm-admin
    mkdir -p mbm-admin
    mv mbm_admin_dist.zip mbm-admin
    cd mbm-admin


    unzip mbm_admin_dist.zip
    rm -f mbm_admin_dist.zip



    sudo rsync -arz --force --delete --progress  $SOURCE_FOLDER $DESTINATION_FOLDER

    #moving the copied file to the /app/views/admin/admin_console
    sudo mv /home/ubuntu/development.php /home/ubuntu/wpdata/plugins/manager/app/views/admin/admin_console
    sudo mv /home/ubuntu/production.php /home/ubuntu/wpdata/plugins/manager/app/views/admin/admin_console


    #moving the hash.php to the desired location
    sudo cp -fv /home/ubuntu/admin_hash.json /home/ubuntu/wpdata/plugins/manager/app/views/admin/admin_console/hash.json
    '
    server_deployed+=(["$server"]="SUCCESS")

完成

这是陷阱,如脚本节所示

trap "sendMessage" INT EXIT
  

每当有一些退出代码时,我都需要运行sendMessage函数   检测到或由于任何错误程序退出。

问题: 当我将退出1放在脚本的末尾时,该函数会被陷阱调用,但假设是,如果我将其放在中间的某个位置,或者恰好在主 for循环启动之后,陷阱将无法捕获退出代码。

我在这里到底不了解或缺少什么?

0 个答案:

没有答案