我有这个小的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
完成