Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

read array from plist through shell script plist buddy

Tags:

shell

ios

plist

I have written shell script which reads array from plist.

PLIST_PATH="./../Documentation/documentation.plist"
echo "PATH = $PLIST_PATH"
FILE_ARRAY=`/usr/libexec/PlistBuddy -c "print :'public-headers'" $PLIST_PATH`

Now I want to retrieve all the strings from this array but i am not able to get count from this array.

please help.

like image 846
Piyush Hirpara Avatar asked May 07 '14 12:05

Piyush Hirpara


2 Answers

The safe way is to iterate thru the array with individual Print statements for the indexes until no key is found anymore. The script below prints the number of entries in the given array key and plist

PLISTBUDDY="/usr/libexec/PlistBuddy -c"
if [ "$#" -ne 2 ]; then
  echo "usage: $0 <array key> <plistfile>"
  exit 1
fi
KEY=$1
PLIST=$2
i=0
while true ; do
   $PLISTBUDDY "Print :$KEY:$i" "$PLIST" >/dev/null 2>/dev/null
   if [ $? -ne 0 ]; then
      echo $i
      break
   fi
   i=$(($i + 1))
done
like image 50
Leo Avatar answered Jan 05 '23 11:01

Leo


Any array from your command will return an array of the form -

Array {
    1
    2
}

sed will remove first and last line, so with this -

declare -a FILE_ARRAY =($(/usr/libexec/PlistBuddy -c "print :'public-headers'" $PLIST_PATH | sed -e 1d -e '$d'))

you will get 1 2, which you are declaring as an array in FILE_ARRAY

which you can access as - ${FILE_ARRAY[1]}

Length of such array will be - echo ${#FILE_ARRAY[@]}

Source of the answer

like image 33
Darpan Avatar answered Jan 05 '23 10:01

Darpan