Есть несколько проблем с тем, как вы получаете и используете имя тома, но прежде чем я до них доберусь: зачем вам это вообще нужно?Я не использовал его, но, насколько я понимаю, 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 хорошо ловитраспространенные ошибки;Я настоятельно рекомендую запустить ваши сценарии через него.