Нужно исправить с помощью строки / переменной - PullRequest
1 голос
/ 31 июля 2010

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 31 июля 2010

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

sed -i -e 's/{{MACHINE_ID}}/'"$macnum"/g filename
1 голос
/ 31 июля 2010
sed -i "s/plist-macnum-placeholder/$macnum/g' file ...

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

0 голосов
/ 31 июля 2010

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

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

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

/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
...