macOS: Как установить переменную для установки тома с помощью ./startosinstall - PullRequest
0 голосов
/ 24 ноября 2018

В целях тестирования я должен установить macOS на разных компьютерах.Я жестко запрограммировал желаемый том установки в мой скрипт запуска.Но я бы хотел установить путь громкости к переменной.Я получаю сообщение об ошибке:

не удалось найти цель.

при попытке запустить скрипт - некоторые нерелевантные части были пропущены.

#!/bin/bash

Boot= diskutil info / | grep "Volume Name:" | awk '{print $3}'
echo $Boot
./startosinstall --volume /Volumes/$Boot --agreetolicense --rebootdelay 200

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Я управлял многими компьютерами, есть инструмент Apple под названием «Сервер» [https://www.apple.com/macos/server/], который содержит инструменты для создания образов и сервер, который может настраивать эти образы при установке.Несмотря на то, что есть некоторая кривая обучения, для автоматизации установки Mac довольно сложно превзойти стоимость, которую запрашивает яблоко ($ 29).

Это также делает много других вещей, какхорошо, но наличие сервера установки того стоит, если вы пытаетесь автоматизировать эти вещи.Раньше у меня было 2 сервера установки в разных физических местах, просто я мог (пере) устанавливать любой Mac в любом месте.

0 голосов
/ 24 ноября 2018

Есть несколько проблем с тем, как вы получаете и используете имя тома, но прежде чем я до них доберусь: зачем вам это вообще нужно?Я не использовал его, но, насколько я понимаю, startosinstall по умолчанию устанавливается на текущий загрузочный том, так что вы можете просто отключить опцию --volume:

./startosinstall --agreetolicense --rebootdelay 200

Теперь, если вы на самом деленам нужно имя загрузочного тома, вот что нужно исправить:

  • Чтобы записать вывод команды в переменную, вам нужно использовать var=$(command).Вы пропускаете $( ), и после = (или перед ним тоже не должно быть пробела).(Кстати, есть версия, в которой вместо $( ) используются обратные кавычки, но она несколько сложнее, поэтому не используйте ее.)

  • Команда diskutil info / | grep "Volume Name:" | awk '{print $3}'выведите первое слово имени тома запуска.Например, если том называется «Macintosh HD», вывод части diskutil | grep будет «Volume Name: Macintosh HD», а awk напечатает третье слово этого слова, которое называется «Macintosh».Исправить это сложнее;самый простой способ, который приходит мне в голову - это использовать sed вместо grep и awk:

    Boot=$(diskutil info / | sed -n 's/^   Volume Name:              //p')
    
  • Наконец, когда вы используете переменную Boot, вынужно поместить двойные кавычки вокруг него, чтобы он не разбивался на несколько «слов»:

    echo "$Boot"
    ./startosinstall --volume "/Volumes/$Boot" --agreetolicense --rebootdelay 200
    

Кстати, shellcheck.net хорошо ловитраспространенные ошибки;Я настоятельно рекомендую запустить ваши сценарии через него.

...