出于测试目的,我必须在许多不同的计算机上安装macOS。我一直在将所需的安装量硬编码到我的启动脚本中。但是我很想将音量路径设置为变量。我收到错误消息:
找不到目标。
在尝试运行脚本时-省略了一些不相关的部分。
#!/bin/bash
Boot= diskutil info / | grep "Volume Name:" | awk '{print $3}'
echo $Boot
./startosinstall --volume /Volumes/$Boot --agreetolicense --rebootdelay 200
答案 0 :(得分:0)
如何获取和使用卷名存在一些问题,但是在我获得它们之前:为什么您完全需要它?我没有使用过它,但是我的理解是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善于捕捉常见错误;我强烈建议您通过它运行脚本。
答案 1 :(得分:0)
我已经管理了许多Mac,有一个名为“服务器” [https://www.apple.com/macos/server/]的苹果工具,其中包含创建映像的工具和可以在安装时自定义这些映像的服务器。尽管有一些学习过程,但要实现Mac的自动化安装,要想达到苹果要求的成本(29美元),就很难超过。
它也可以做很多其他事情,但是如果您想自动化这些事情,那么仅仅拥有安装服务器就值得了。我曾经在不同的物理位置有2台安装服务器,只是能够在任何地方(重新)安装任何Mac。