Необходимо исправить использование строки/переменной

63
5

Я пишу script для автоматизации процесса настройки группы Mac в компьютерной лаборатории.


Каждая система уникально идентифицирована, и мне нужен способ исправления файла plist в нескольких местах с той же строкой, которая будет считана от пользователя в script, который является bash script


Исходная строка всегда одна и та же. Строка исправления является переменной в зависимости от идентификатора системы, на которой выполняется script. Эта строка считывается от пользователя в начале script для различных целей и сохраняется в $macnum.


Может ли кто-нибудь предложить мне простое решение, которое может быть написано сценарием для выполнения задачи? Спасибо.

спросил(а) 2021-01-25T21:50:53+03:00 4 месяца, 4 недели назад
1
Решение
77

Вы можете использовать уникальный идентификатор (например, {{MACHINE_ID}}) в plist и использовать sed для его замены:

sed -i -e 's/{{MACHINE_ID}}/'"$macnum"/g filename

ответил(а) 2021-01-25T21:50:53+03:00 4 месяца, 4 недели назад
63

sed -i "s/plist-macnum-placeholder/$macnum/g' file ...

Где -i означает отредактировать файл "на месте" и /g говорит сделать замену несколько раз в строке и может быть отброшен, если есть только один.

ответил(а) 2021-01-25T21:50:53+03:00 4 месяца, 4 недели назад
45

Придерживающийся sed-основанный подход и msw дал бы работать нормально, если измененный plist находится в формате XML, но если он будет в двоичном формате Apple, это, вероятно, испортит формат файла. Вы можете использовать plutil, чтобы сначала преобразовать его в XML:


plutil -convert xml1 filename
sed -i -e "s/placeholder/$macnum/g" filename

После этого не нужно будет преобразовывать его обратно в двоичный формат, поскольку фреймворки Apple plist считывают два формата взаимозаменяемо. Другим подходом было бы использование PlistBuddy для редактирования содержимого plist (хотя для script потребуется знать, какие записи задавать значения, а не просто заменять местозаполнитель):


/usr/libexec/PlistBuddy -c "set :oneentry 'value including $macnum where appropriate'" filename
/usr/libexec/PlistBuddy -c "set :anotherentry 'value including $macnum where appropriate'" filename

Наконец, вы можете сделать то же самое с настройками по умолчанию, хотя для этого требуется указать файл .plist по полному пути и оставить имя .plist без его имени:


defaults write oneentry "value including $macnum where appropriate" /path/to/filename-without-plist
defaults write anotherentry "value including $macnum where appropriate" /path/to/filename-without-plist

ответил(а) 2021-01-25T21:50:53+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема