PlistBuddy - добавление элементов массива работает в терминале, но не в скрипте bash

Я пытаюсь манипулировать своим файлом Info.plist, используя plistbuddy добавив поле массива пользовательских шрифтов скриптом. Команды успешно выполняются в терминале (оба: запись массива создана и записи добавлены):

luka$ /usr/libexec/PlistBuddy testing.plist
File Doesn't Exist, Will Create: testing.plist
Command: Add UIAppFonts array
Command: Add UIAppFonts: string test
Command: Add UIAppFonts: string Test2
Command: Save
Saving...

Это производит хороший файл plist, как и ожидалось:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>UIAppFonts</key>
    <array>
        <string>test</string>
        <string>Test2</string>
    </array>
</dict>
</plist>

Но те же команды терпят неудачу при выполнении в скрипте bash (test.sh):

#! /bin/bash
PLISTBUDDY="/usr/libexec/PlistBuddy -c"
FILE="./test.plist"
$PLISTBUDDY "Add UIAppFonts array" $FILE
FF_CUSTOM_FONTS="Font_a.otf,Font_b.otf"
set -f; IFS=,
    FONT_INDEX=0
    for CUSTOM_FONT in $FF_CUSTOM_FONTS
        do
            PLIST_COMMAND="Add UIAppFonts: string $CUSTOM_FONT"
            echo "executing: $PLIST_COMMAND"
            $PLISTBUDDY $PLIST_COMMAND $FILE
            FONT_INDEX=$((FONT_INDEX+1))
        done
set =f; unset IFS

В этом случае создается только массив, но добавление записей не выполняется. Я только получаю не так много описательной ошибки:

luka$ ./test.sh
File Doesn't Exist, Will Create: ./test.plist
executing: Add UIAppFonts: string Font_a.otf
./test.sh: line 12: /usr/libexec/PlistBuddy -c: No such file or directory
executing: Add UIAppFonts: string Font_b.otf
./test.sh: line 12: /usr/libexec/PlistBuddy -c: No such file or directory

Создает это (только массив, без записей):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>UIAppFonts</key>
    <array/>
</dict>
</plist>

Почему это происходит и почему только с командами, добавляющими записи в массив? plistbuddy во многих других местах (в скриптах bash) и таких командах, как установка, добавление и удаление простых полей, все работает просто отлично.

Я не так хорош в сценариях, так что, скорее всего, мне не хватает какой-то экранизации или других специфических деталей bash.

0 ответов

Другие вопросы по тегам