macOS:如何使用 ./startosinstall 将安装量设置为变量
macOS: How to set install volume to a variable using ./startosinstall
出于测试目的,我必须在很多不同的机器上安装 macOS。我一直在将所需的安装量硬编码到我的启动脚本中。但我喜欢将卷路径设置为变量。我收到错误:
could not find target.
在尝试 运行 脚本时 - 一些不相关的部分已被省略。
#!/bin/bash
Boot= diskutil info / | grep "Volume Name:" | awk '{print }'
echo $Boot
./startosinstall --volume /Volumes/$Boot --agreetolicense --rebootdelay 200
您获取和使用卷名的方式有几个问题,但在我开始讨论之前:您为什么需要它?我没用过,但我的理解是 startosinstall
默认安装到当前启动卷上,所以你可以关闭 --volume
选项:
./startosinstall --agreetolicense --rebootdelay 200
现在,如果您确实需要启动卷名称,则需要修复以下内容:
要在变量中捕获命令的输出,您需要使用var=$(command)
。您缺少 $( )
,并且 =
之后(或之前)不能有 space。 (顺便说一句,有一个使用反引号而不是 $( )
的版本,但它在几个方面比较混乱,所以不要使用它。)
命令 diskutil info / | grep "Volume Name:" | awk '{print }'
将打印 启动卷名称的第一个单词。例如,如果卷名为 "Macintosh HD",diskutil | grep
部分的输出为“Volume Name: Macintosh HD
”,而 awk
将打印其中的第三个单词,即 "Macintosh"。解决这个问题比较麻烦;我想到的最简单的方法是使用 sed
而不是 grep
和 awk
:
Boot=$(diskutil info / | sed -n 's/^ Volume Name: //p')
最后,当你使用Boot
这个变量时,你需要在它周围加上双引号,以防止它被拆分成多个"words":
echo "$Boot"
./startosinstall --volume "/Volumes/$Boot" --agreetolicense --rebootdelay 200
BTW,shellcheck.net擅长捕捉常见错误;我强烈推荐 运行 您的脚本。
我管理过许多 macs,有一个名为 "Server" [ https://www.apple.com/macos/server/ ] 的苹果工具,其中包含创建图像的工具和可以自定义这些图像的服务器安装时的图像。虽然有一点学习曲线,但要自动安装 mac,很难击败苹果要求的成本(29 美元)。
它还可以做很多其他事情,但是如果您要尝试自动化这些事情,那么仅仅拥有安装服务器就非常值得。我曾经在不同的物理位置有 2 个安装服务器,只是能够在任何地方(重新)安装任何 mac。
出于测试目的,我必须在很多不同的机器上安装 macOS。我一直在将所需的安装量硬编码到我的启动脚本中。但我喜欢将卷路径设置为变量。我收到错误:
could not find target.
在尝试 运行 脚本时 - 一些不相关的部分已被省略。
#!/bin/bash
Boot= diskutil info / | grep "Volume Name:" | awk '{print }'
echo $Boot
./startosinstall --volume /Volumes/$Boot --agreetolicense --rebootdelay 200
您获取和使用卷名的方式有几个问题,但在我开始讨论之前:您为什么需要它?我没用过,但我的理解是 startosinstall
默认安装到当前启动卷上,所以你可以关闭 --volume
选项:
./startosinstall --agreetolicense --rebootdelay 200
现在,如果您确实需要启动卷名称,则需要修复以下内容:
要在变量中捕获命令的输出,您需要使用
var=$(command)
。您缺少$( )
,并且=
之后(或之前)不能有 space。 (顺便说一句,有一个使用反引号而不是$( )
的版本,但它在几个方面比较混乱,所以不要使用它。)命令
diskutil info / | grep "Volume Name:" | awk '{print }'
将打印 启动卷名称的第一个单词。例如,如果卷名为 "Macintosh HD",diskutil | grep
部分的输出为“Volume Name: Macintosh HD
”,而awk
将打印其中的第三个单词,即 "Macintosh"。解决这个问题比较麻烦;我想到的最简单的方法是使用sed
而不是grep
和awk
:Boot=$(diskutil info / | sed -n 's/^ Volume Name: //p')
最后,当你使用
Boot
这个变量时,你需要在它周围加上双引号,以防止它被拆分成多个"words":echo "$Boot" ./startosinstall --volume "/Volumes/$Boot" --agreetolicense --rebootdelay 200
BTW,shellcheck.net擅长捕捉常见错误;我强烈推荐 运行 您的脚本。
我管理过许多 macs,有一个名为 "Server" [ https://www.apple.com/macos/server/ ] 的苹果工具,其中包含创建图像的工具和可以自定义这些图像的服务器安装时的图像。虽然有一点学习曲线,但要自动安装 mac,很难击败苹果要求的成本(29 美元)。
它还可以做很多其他事情,但是如果您要尝试自动化这些事情,那么仅仅拥有安装服务器就非常值得。我曾经在不同的物理位置有 2 个安装服务器,只是能够在任何地方(重新)安装任何 mac。