在 BASH 脚本中,我需要检查 和gcc, g++, cpp, make, libpng devel, zlib devel, git, Java
(包括开发文件)ant
是否pkg-config
在 Mac OS X 上可用,如果没有,我需要提示用户安装它们。
这在 Linux 上是很容易的任务,因为它有包管理工具,但我不知道如何在 Mac OS X shell 中执行此操作。例如,在 openSUSE 上我可以使用rpm -q
和zypper in
,以及基于 Debian 的发行版dpkg-query
和apt-get install
。但如何在 Mac 上做到这一点呢?
答案1
苹果的包管理系统经常受到批评。该实用程序pkgutil
可用于列出和查询包裹收据。
列出使用 Apple 安装程序安装的所有软件包
pkgutil --pkgs
包 ID 的正则表达式
pkgutil --pkgs=.\+Xcode.\+
列出包id中的所有文件
pkgutil --only-files --files com.apple.pkg.update.devtools.3.2.6.XcodeUpdate
然后您可以再次使用lsbom
和读取 /var/db/receipts 中的 bom 文件
用户还安装其他包管理系统,例如 MacPorts、fink 或 Homebrew。或者以任何前缀编译自己的。pkgutil
不会列出通过这些方法安装的软件包。
如果您的目标操作系统是 OS X10.9 或 OS X 10.10 那么
gcc --version
该命令将输出 gcc 版本,或者系统将提示您安装 XCode 命令行工具。gcc, g++, cpp, make, and git
将与其他工具一起安装。 Java 包由 Oracle 提供。您可以进行测试,java --version
但您需要熟悉 Apple 的框架、插件和捆绑包才能搜索头文件。pkgutil
将是这个过程的一个很好的候选者。
您提到的其他软件包可能会在 shell 脚本中进行编译,或者编译并放入 Apple 安装程序包中,然后通过 shell 脚本进行安装。没有一个简单的方法。
答案2
如果这个包有一个可以找到的二进制文件,你可以这样做 -
package_name=<packge-name>
t=`which $package_name`
[ -z "$t" ] && echo "the $package_name isn't installed!"
答案3
我首先想到的是system_profiler
:
system_profiler SPSoftwareDataType
上述命令的输出看起来类似于yum info
此实用程序还有很多其他选项。 man system_profiler
应该让你走上正轨。这博客条目将为您提供更多信息。