在Mac OS上通过终端安装dmg包

11
我想通过终端在我的MAC OS上安装dmg Java包。
我尝试使用以下命令:

sudo installer -pkg /path/to/package.dmg -target /

sudo installer -package jdk-7u51-macos-x64.dmg -target /

但我收到了这个错误:

installer: Error the package path specified was invalid: 'jdk-7u51-macos-x64.dmg' 

看起来你在错误的目录下,也就是不在包所在的目录下。输入“ls”命令,查看是否能在当前目录下看到该包。 - Mark Setchell
如果您需要切换到桌面目录,请输入“cd Desktop”,然后进行安装。 - Mark Setchell
我和我的文件在同一个文件夹中。 - user3472065
如果我提取pkg包,那么我的命令可以正常工作。但是我想找到一种直接执行的方法... - user3472065
2
我认为安装程序期望的文件扩展名是“.pkg”,而不是以“.dmg”结尾的磁盘映像。我认为您必须首先通过双击挂载磁盘映像。 - Mark Setchell
显示剩余5条评论
4个回答

15

试试这个:

MOUNTDIR=$(echo `hdiutil mount jdk-7u51-macos-x64.dmg | tail -1 \
| awk '{$1=$2=""; print $0}'` | xargs -0 echo) \
&& sudo installer -pkg "${MOUNTDIR}/"*.pkg -target / 

@SebMa 我已经安装了 10.13.5 Beta (17F45c),这个 awk 对我仍然有效,即使挂载目录中有空格。 - Mateusz Szlosek
你的 awk 命令在挂载目录没有空间时是否也会返回它? - SebMa
因为在我的情况下$2等于Apple_HFS。完整输出: /dev/disk2s2 Apple_HFS /Volumes/Lemur Installer - Mateusz Szlosek
这是一个带有一些额外烦人的复杂性的无用反引号echo(http://www.iki.fi/era/unix/award.html#echo)。你只需要`MOUNTDIR=$(hdiutil mount jdk-7u51-macos-x64.dmg | awk 'END {$1=$2=""; print $0}')`(虽然你应该避免为私有变量使用全大写)。 - tripleee

2

假设变量 dmgFilePath 包含了你的 dmg 文件的路径。

那么你可以尝试这样做:

$ MOUNTDEV=$(hdiutil mount $dmgFilePath | awk '/dev.disk/{print$1}')
$ MOUNTDIR="$(mount | grep $MOUNTDEV | awk '{$1=$2="";sub(" [(].*","");sub("^  ","");print}')"
$ sudo installer -pkg "${MOUNTDIR}/"*.pkg -target /
$ hdiutil unmount "$MOUNTDIR"

即使"$MOUNTDIR"中包含一个空格,在macOS High Sierra上也可以进行测试。


如果挂载的目录中有空格,例如:/Volumes/Lamur Installer,它将无法工作。我只会得到 Installer - Mateusz Szlosek
1
@MateuszSzlosek 我忘记提到我根据你的评论进行了编辑的那一天,我已经解决了空格问题。现在应该可以在挂载目录中使用空格了。 - SebMa

1
我遇到了完全相同的问题,并找到了根本原因。如果您尝试安装一个安装程序无权访问目录的软件包,您将会收到这个奇怪的错误。

i.e

osascript -e {'do shell script "installer -allowUntrusted  -pkg ~/Download/OpenJDK8U-jdk_x64_mac_hotspot_8u275b01.pkg  -target /tmp/ " with administrator privileges'}

1:150: execution error: installer: Error - the package path specified was invalid: '/Users/user-x/Download/OpenJDK8U-jdk_x64_mac_hotspot_8u275b01.pkg'. (1)

可以将软件包移动到 /tmp/ 目录下,或者更改目录权限,以便 Applescript 或安装程序命令可以访问该文件。

osascript -e {'do shell script "installer -allowUntrusted  -pkg /tmp/OpenJDK8U-jdk_x64_mac_hotspot_8u275b01.pkg  -target /tmp/ " with administrator privileges'}     
installer: The upgrade was successful.K

-2

感谢Mateusz Szlosek,

对于我:

$ MOUNTDIR=$(echo `hdiutil mount /Users/valorisa/Downloads/VirtualBox\ 5.0.14\ Build\ 105127
/VirtualBox-5.0.14-105127-OSX.dmg | tail -1 | awk '{$1=$2=""; print $0}'` | xargs -0 echo) 
&& sudo installer -pkg "${MOUNTDIR}/"*.pkg -target /

Password:
installer: Package name is Oracle VM VirtualBox
installer: Upgrading at base path /
installer: The upgrade was successful.

Valorisa


请解释得更详细些。 - Sajjad Aemmi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接