Mac OS X 如何验证特定软件包是否已安装

Mac OS X 如何验证特定软件包是否已安装

在 BASH 脚本中,我需要检查 和gcc, g++, cpp, make, libpng devel, zlib devel, git, Java(包括开发文件)ant是否pkg-config在 Mac OS X 上可用,如果没有,我需要提示用户安装它们。

这在 Linux 上是很容易的任务,因为它有包管理工具,但我不知道如何在 Mac OS X shell 中执行此操作。例如,在 openSUSE 上我可以使用rpm -qzypper in,以及基于 Debian 的发行版dpkg-queryapt-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应该让你走上正轨。这博客条目将为您提供更多信息。

相关内容