Bash macOS:如何使用./startoinstall将安装卷设置为变量

Bash macOS:如何使用./startoinstall将安装卷设置为变量,bash,macos,macos-mojave,Bash,Macos,Macos Mojave,出于测试目的,我必须在许多不同的机器上安装macOS。我一直在将所需的安装卷硬编码到我的启动脚本中。但是我想将音量路径设置为一个变量。我得到一个错误: 找不到目标 在尝试运行脚本时,忽略了一些不相关的部分 #!/bin/bash Boot= diskutil info / | grep "Volume Name:" | awk '{print $3}' echo $Boot ./startosinstall --volume /Volumes/$Boot --agreetolicense --

出于测试目的,我必须在许多不同的机器上安装macOS。我一直在将所需的安装卷硬编码到我的启动脚本中。但是我想将音量路径设置为一个变量。我得到一个错误:

找不到目标

在尝试运行脚本时,忽略了一些不相关的部分

#!/bin/bash

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

如何获取和使用卷名有几个问题,但在我开始之前:为什么需要它?我没有使用过它,但我的理解是,
startoinstall
默认安装到当前启动卷上,因此您只需关闭
--volume
选项即可:

./startosinstall --agreetolicense --rebootdelay 200
现在,如果您确实需要启动卷名,则需要解决以下问题:

  • 要在变量中捕获命令的输出,需要使用
    var=$(command)
    。您缺少
    $()
    ,并且
    =
    之后(或之前)不能有空格。(顺便说一句,有一个版本使用反引号而不是
    $()
    ,但是它在两个方面比较混乱,所以不要使用它。)

  • 命令
    diskutil info/|grep“卷名:| 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
    变量时,需要在其周围加上双引号,以防止将其拆分为多个“字”:


顺便说一句,善于捕捉常见错误;我强烈建议您通过它运行脚本。

我管理过许多Mac电脑,有一个名为“服务器”[]的apple工具,其中包含创建图像的工具和一个可以在安装时自定义这些图像的服务器。虽然有一点学习的曲线,自动安装mac电脑,这是很难击败的成本,苹果要求它(29美元)

它还可以做很多其他的事情,但是如果你想让这些事情自动化的话,安装服务器是值得的。我曾经在不同的物理位置安装过两台服务器,只是可以在任何地方(重新)安装任何mac

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