如何知道哪些应用程序可用于 mac 命令行上打开命令的 -a 标志

How to know what applications are available for the -a flag for the open command on mac command line

我知道如果我使用 mac 命令行,我可以使用命令

打开一个文件
open file

此外,如果我知道我想要打开文件的应用程序的名称,我应该能够用

打开它
open -a "Application" file

但是,我不知道如何知道我有哪些名称可用于“应用程序”,或者我如何能够将不同的应用程序添加到我可以通过这种方式调用的应用程序。任何指向正确方向的指示(或者我本可以自己解决这个问题)都将不胜感激!

我经常想知道自己并希望这种粗略的方法不会阻止任何知道实际答案的人做出回应。请不要急于接受这个 work-around 否则人们将失去分享正确答案的兴趣。

我有两个粗笨的方法...

方法 1:我可以查找所有名为 xxx.app 的东西,同时丢弃错误,如下所示:

find / -name "*.app" 2> /dev/null

方法2:我得到所有运行进程的列表并将其保存在一个文件中,然后我通过[=44启动我正在寻找的应用程序=] 它,或者来自 Spotlight,然后我得到一个新列表 运行 并比较以查看新内容:

ps -aef > /tmp/a
# Launch app
ps -aef > /tmp/b
opendiff /tmp/{a,b}

还有一个 bundleId 可以传递给 open,您可以在应用程序上使用 mdls 命令来获取它的 bundleId - 在 页数,其中:

mdls /Applications/Pages.app

所以您大概可以使用 mdfind 以某种方式获取可能是应用程序的所有内容的 bundleId。 mdfind

示例

以下列出了 Apple 认为可能是应用程序包的所有内容:

mdfind "kMDItemContentType == 'com.apple.application-bundle'"

方法一

  1. 点击屏幕 top-left 角的  Apple 图标。
  2. 点击“关于此 Mac”
  3. 点击“系统报告”
  4. 导航到“Software/Applications”

方法二

如果您更喜欢 CLI 而不是 GUI,请使用此方法。

system_profiler -json SPApplicationsDataType | jq -r '.SPApplicationsDataType[] | ._name'

方法三

这很慢,但很有效。

find / -name *.app