Bash数组没有传递出循环

时间:2017-12-29 19:04:44

标签: arrays bash

我有这个小的bash脚本来构建自定义ROM(见下文)

现在我遇到的问题是,在循环完成后我似乎无法读取数组的内容

在新循环传递之前调用它时,一切都很好,但是当循环完成时,我似乎无法读取它(似乎是空的)

我需要说我不是bash专家,而且我通常从Google朋友那里做我的代码

我在这里做错了什么?

// returns Api error response
app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
    appBuilder.UseStatusCodePagesWithReExecute("/apierror/{0}");
appBuilder.UseExceptionHandler("/apierror/500");
});
// returns MVC error page
app.UseWhen(context => !context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
    appBuilder.UseStatusCodePagesWithReExecute("/error/{0}");
appBuilder.UseExceptionHandler("/error/500");
});

这是我失去的部分

#!/bin/bash
#Build crDroid and optionally upload to FTP for all devices in devices.txt

#   << Start configuration >>
#crDroid_path is the location of build environment root path aka {ANDROID_BUILD_TOP}
crDroid_path=~/crDroid
#set how much RAM is used by JACK if building with
RAM=12
#CCache size
ccachesize=30G
#set if you want to save changelog file to script_path (from where the script runs) at end of build (useful to add changelog info to forums and so on... easy to find)
copy_changelog=true
#FTP config
upload_build=true
FTP_hostname="ftp://domain.tld"
FTP_username=username
FTP_password=password
#   << End configuration >>

# Specify colors utilized in the terminal
red=$(tput setaf 1)                         #  red
grn=$(tput setaf 2)                         #  green
ylw=$(tput setaf 3)                         #  yellow
blu=$(tput setaf 4)                         #  blue
cya=$(tput rev)$(tput bold)$(tput setaf 6)  #  bold cyan reversed
ylr=$(tput rev)$(tput bold)$(tput setaf 3)  #  bold yellow reversed
grr=$(tput rev)$(tput bold)$(tput setaf 2)  #  bold green reversed
txtrst=$(tput sgr0)                         #  Reset

echo "==========================================="
echo "${cya}Initiate build script - v2.9 by Gabriel Lup (gwolfu@xda)"${txtrst}
echo "==========================================="

#detect path where the script is running
script_path="`dirname \"$0\"`"              # relative
script_path="`( cd \"$script_path\" && pwd )`"  # absolutized and normalized
if [ -z "$script_path" ] ; then
    # error; for some reason, the path is not accessible
    echo "${red}Can not read run path"
    echo "Build can not continue"${txtrst}
    exit 1  # fail
fi

#check if devices.txt exists
devices=$script_path/devices.txt
if [ ! -f $devices ]; then
    echo "${red}devices.txt missing"
    echo "Build can not continue"${txtrst}
    exit 1  # fail
fi

#cleanup old changelog.txt
changelog=$script_path/changelog.txt
if [ -e $changelog ]; then
    rm -f $changelog
fi

#check if already synced
crdroid_synced=$crDroid_path/vendor/lineage/config/crdroid.mk
if [ ! -f $crdroid_synced ]; then
    echo "${ylw}Detected missing first sync... atempting first time sync..."${txtrst}
    cd $crDroid_path
    repo sync -f --force-sync --no-clone-bundle
fi

if [ ! -f $crdroid_synced ]; then
    read -p "${red}Something went wrong :( - Maybe misconfigured script!?"
    exit
fi

cd $crDroid_path
echo "${blu}Run sync?${txtrst}"
select yn in "Yes" "No"; do
    case $yn in
        Yes ) repo sync -f --force-sync --no-clone-bundle; break;;
        No ) break;;
    esac
done

echo "${blu}Make clean build?${txtrst}"
select yn in "Yes" "No"; do
    case $yn in
        Yes ) . build/envsetup.sh && make clean; break;;
        No ) break;;
    esac
done

#check if repopick.txt exists and execute commands from it
repopick_file=$script_path/repopick.txt
if [ -f $repopick_file ]; then
    . build/envsetup.sh
    cat $script_path/repopick.txt | while read line
    do
        $line
    done
fi

INFO=()

#Set CCache size
$crDroid_path/prebuilts/misc/linux-x86/ccache/ccache -M $ccachesize

#detect android version based on crdroid.mk
rl2="`sed -n '2p' $crDroid_path/vendor/lineage/config/crdroid.mk`"
set -- "$rl2"
IFS=" "; declare -a android_major=($*) 
rl3="`sed -n '3p' $crDroid_path/vendor/lineage/config/crdroid.mk`"
set -- "$rl3"
IFS=" "; declare -a android_minor=($*) 
android=${android_major[2]}"."${android_minor[2]}

#detect crDroid version based on crdroid.mk
rl6="`sed -n '6p' $crDroid_path/vendor/lineage/config/crdroid.mk`"
set -- "$rl6"
IFS=" "; declare -a crDroid_version=($*)
crDroid=${crDroid_version[2]} 

echo "==========================================="
echo "${ylr}Setting build environment"${txtrst}
echo "-------------------------------------------"
echo "Script path set to: "${grn}$script_path${txtrst}
echo "crDroid path set to: "${grn}$crDroid_path${txtrst}
echo "Jack RAM usage set to: "${grn}$RAM"GB RAM"${txtrst}
echo "Copy changelog to script path at end of build?: "${grn}$copy_changelog${txtrst}
echo "Upload complete build to FTP?: "${grn}$upload_build${txtrst}
echo "Trying to compile crDroid "${grn}$crDroid${txtrst}" based on Android "${grn}$android${txtrst}
echo "==========================================="
echo ""

echo "${ylw}Initiate build for all devices...${txtrst}" #described in devices.txt
cat $script_path/devices.txt | while read line
do
    IFS=', ' read -r -a device_uploadpath <<< "$line"
    #set device name 
    device=${device_uploadpath[0]}
    if [[ $device == *"#"* ]]; then
        device="${device//#}"
        echo "${red}Found comment (#): Skipping build for ${ylw}$device ${red}${txtrst}"
        INFO+=('1 '$device' (Reason: instruction to skip found in devices.txt)')
    else
        echo "${grn}Now building "${ylw}$device${txtrst}

        #set BuildID - aka name of the zip file from OUT folder at the end of the build  
        BuildID="crDroidAndroid-"$android"-"$(date -d "$D" '+%Y')$(date -d "$D" '+%m')$(date -d "$D" '+%d')"-"$device"-v"$crDroid"-BETA.zip"

        #Jack settings
        echo "Adding "$RAM" RAM to JACK"
        export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx"$RAM"g"
        ./prebuilts/sdk/tools/jack-admin kill-server
        ./prebuilts/sdk/tools/jack-admin start-server

        #initiate build script and start actual build
        . build/envsetup.sh
        brunch $device

        #define upload file path
        uploadfile=$crDroid_path/out/target/product/$device/$BuildID
        echo "Checking build result status..."
        if [ -e "$uploadfile" ]; then
            echo "${grn}Seems compilation is ready!${txtrst}"
            if [ "$upload_build" = true ] ; then
                echo "${grn}Uploading new "$device" build to FTP server${txtrst}"
                echo "${ylw}Creating folder over FTP if not exist${txtrst}"
                curl $FTP_hostname/${device_uploadpath[1]}/ --user $FTP_username:$FTP_password --ftp-create-dirs
                echo "${ylw}Uploading...${txtrst}"
                curl -T $uploadfile $FTP_hostname/${device_uploadpath[1]}/ --user $FTP_username:$FTP_password
                res=$?
                if test "$res" != "0"; then
                    echo "${red}Upload of build for device $device failed with code $res${txtrst}"
                    INFO+=('1 '$device' (Reason: CURL error no.'$res' ,however compilation appears to be made)')
                else
                    INFO+=('2 '$device)
                fi
            fi

            if [ "$copy_changelog" = true ] ; then
                echo "Copy changelog file to "$script_path
                cp $crDroid_path/out/target/product/$device/system/etc/Changelog.txt $script_path/changelog.txt 
            fi
        else 
            echo "${red}Device "$device "did not produce a proper build${txtrst}"
            INFO+=('0 '$device' (Reason: unknown - better run a new build manually)')
        fi
    fi
done

echo ${grr}"Script finished with following results"${txtrst}
for i in "${INFO[@]}"
do
    #echo $i
    if [[ $i == *"0"* ]]; then
        codename=${i//0}
        echo "${red}Compilation error for device" $codename${txtrst}
    elif [[ $i == *"1"* ]]; then
        codename=${i//1}
        echo "${ylw}Warning for device" $codename${txtrst}
    else
        codename=${i//2}
        echo "${grn}Device" $codename "compiled and uploaded successfully :)${txtrst}"
    fi
done

完成

0 个答案:

没有答案