在命令行上安装 DMG 时绕过许可协议

在命令行上安装 DMG 时绕过许可协议

我正在使用 puppet 自动执行 Mac 安装。作为其中的一部分,我需要安装几个 .dmg 格式的程序。

我使用以下方法来安装它们:

sudo /usr/bin/hdiutil mount -plist -nobrowse -readonly -quiet -mountrandom /tmp Program.dmg

问题是某些 .dmg 文件附带许可证,因此脚本无法接受许可证。(使用 puppet 运行时没有 stdin/out,因此我无法手动批准它继续。)

有没有办法预先批准或强制批准许可证?

答案1

如果你有 GUI 并且能够并行执行两个命令行调用,则可以使用

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter /path/to/file.dmg

osascript accept.scpt

后者执行以下 AppleScript:

tell application "System Events"
    delay 5 # wait 5 seconds -- I tested it using two terminal tabs and needed the time
    key code 48 # press tab 4 times in the license window
    key code 48
    key code 48
    key code 48
    keystroke " " # press space to click "accept"
end tell

bash,我可以写

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter file.dmg & osascript accept.scpt

答案2

当我遇到包含 EULA 的 .dmg 时,这个方法对我很有用,我想通过命令行安装它而无需用户交互......

/usr/bin/hdiutil convert -quiet foo.dmg -format UDTO -o bar
/usr/bin/hdiutil attach -quiet -nobrowse -noverify -noautoopen -mountpoint right_here bar.cdr

(注意:我很确定并非所有上述选项都是绕过 EULA 所必需的,例如-nobrowse,,,。但是,我使用了它们-noverify,并且在没有它们的情况下也没有进行测试,所以我不想声称我没有测试过的东西。)-noautoopen-mountpoint

我最终得到的是一个目录

bar.cdr
foo.dmg
right_here/

其中包含了没有被提示 EULAright_here/的内容。foo.dmg

完成后请务必将其分离!

/usr/bin/hdiutil detach right_here/

了解更多信息:hdiutil(1) Mac OS X 手册页

年龄变化率

答案3

如果只需要输入“Y”,则将 yes 命令放入 hdiutil 命令中:

yes | /bin/hdiutil [...]

这将模拟按“y”并在命令行返回。

要输入其他内容,只需将其作为参数放在命令行上:

yes accept | ...

这将在脚本中输入“接受”。

请注意,如果脚本多次要求输入,yes 命令将会输入多个条目。您可能会看到类似“broken pipe”的输出 - 这仅意味着您通过管道输入的命令已退出,而“yes”仍在发送输入。

答案4

如果您有需要接受的多页 EULA,您可以通过在q接受命令的其余部分之前放置一个来进入接受部分(因为您需要的只是 中的接受退出命令less,所以您也可以使用ZZQ)。

例如,如果 EULA 要求您键入y以接受,则您可以运行:

yes qy | hdiutil attach ...

相关内容