通过Shell自动安装*.pkg包时的报错问题及密码传入需求咨询
通过Shell自动安装*.pkg包时的报错问题及密码传入需求咨询
关于「Can't load package...Distribution doesn’t exist」报错的解决思路
这个错误大概率和你用的-store参数有关——这个参数是专门给从Mac App Store获取的安装包准备的,本地pkg包用它反而会触发异常。你可以先试试去掉这个参数,用基础命令执行:
sudo installer -pkg "/path/to/file.pkg" -target /
如果还是报错,那可能是安装包本身或路径的问题,可以按这几步排查:
- 验证安装包完整性:用
pkgutil工具检查包的结构和签名,比如执行:
展开后如果确实没有pkgutil --check-signature "/path/to/file.pkg" # 或者展开包查看内部结构 pkgutil --expand "/path/to/file.pkg" ~/Desktop/expanded-pkgDistribution文件,说明这个pkg包可能损坏了,或者不是标准的Mac安装包格式,需要重新获取合法的安装包。 - 确认路径正确性:虽然你加了引号,但可以试试把pkg放到桌面这种无特殊字符的路径下测试,比如
"/Users/你的用户名/Desktop/test.pkg",避免路径里的特殊字符或相对路径导致的识别问题。
关于自动传入sudo密码的方法
直接明文传密码安全性很低,但如果是自动化场景必须这么做,可以用echo结合sudo -S参数(让sudo从标准输入读取密码):
echo "你的sudo密码" | sudo -S installer -pkg "/path/to/file.pkg" -target /
更安全的方式是配置sudo免密执行installer命令:
- 执行
sudo visudo打开sudoers配置文件(别直接用普通编辑器改,容易导致sudo权限异常) - 在文件末尾添加一行(把
你的用户名换成实际的Mac用户名):你的用户名 ALL=(ALL) NOPASSWD: /usr/sbin/installer - 保存退出后,再运行
sudo installer命令就不会弹出密码输入框了。这种方式避免了明文写密码,相对更安全,但要注意不要给过多命令开免密权限。
备注:内容来源于stack exchange,提问作者Xenonite
相关产品推荐
相关产品推荐

