在macOS上,如何找到使用"打开"命令打开的应用程序路径?



在macOS中,通过"打开"命令打开应用程序的选项之一如下:

$ open -a "Google Chrome"
$ open -a "GIMP"

但我意识到,即使应用程序不在/Applications~/Applications目录中,上面的命令也能工作。

那么,使用命令行"如何获取此应用程序的路径"?

我试着使用find命令搜索整个机器,但我认为有一种更容易的方法可以找到它

原因是我需要访问".app"目录中的bin文件,如下所示:

$ /path/to/GIMP.app/Contents/MacOS/GIMP-bin --help-all

因为下面的命令似乎没有解析参数。

$ open -a "GIMP" --args --help-all

  • macOS HighSierra(OSX 10.13.5(

我想我找到了另一个答案。

在像Applescript一样检查路径时,此脚本不会启动应用程序。

由于它只是greplsregister的转储结果,所以它可能不如Applescript准确,但到目前为止,它似乎可以工作。

脚本:

使用lsregister命令查找具有bash(而不使用AppleScript(的应用程序路径的另一种方法。

#!/bin/bash
# findApp.sh
# ==========
NAME_APP=$1
PATH_LAUNCHSERVICES="/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister"
${PATH_LAUNCHSERVICES} -dump | grep -o "/.*${NAME_APP}.app" | grep -v -E "Caches|TimeMachine|Temporary|/Volumes/${NAME_APP}" | uniq

用法:

$ ./findApp.sh "Google Chrome"
/Applications/Google Chrome.app
$ ./findApp.sh GIMP
/Volumes/External_HDD/Applications/GIMP/GIMP_v2.8/GIMP.app
  • REF:Applescript:获取.app的路径而不打开它@堆栈溢出

我想我找到了答案。

使用osascript命令获取与系统关联的应用程序路径。

外壳:

$ osascript -e 'POSIX path of (path to application "GIMP")'
/Volumes/External_HDD/Applications/GIMP/GIMP_v2.8/GIMP.app/

$ open -a "GIMP"
$ osascript -e 'tell application "System Events" to POSIX path of (file of process "GIMP" as alias)'
/Volumes/External_HDD/Applications/GIMP/GIMP_v2.8/GIMP.app/

示例脚本:

获取GIMP二进制文件并使其作为CLI应用程序工作的示例shell脚本。(在macOS HighSierra OSX 10.13.6上测试(

#!/bin/bash
PATH_GIMP=`osascript -e 'POSIX path of (path to application "GIMP")'`
echo `$PATH_GIMP/Contents/MacOS/GIMP-bin --help-all`

  • 参考:
    • 如何在终端中找到程序的路径?|超级用户@StackExchange
    • AppleScriptのファイル参照にまつわるメモ @ ザリガニが見ていた...

根据我的经验,找到应用程序安装位置的快速方法是运行:

which <app_name>
> /location/where/running/from

如果返回的文件是symlink,请运行以下操作:

readlink /location/where/running/from
> /the/real/source/where/running/from

如果您正在处理python应用程序,以下内容可能也很有用:

pip show <app_name>
> Name: ...
> Version: ...
> ...
> Location: /location/of/the/app

macOS上的open命令不会提供这些信息。但既然你大概知道自己在macOS上运行,那就自己做测试吧。也就是说,测试/Applications/GIMP.app~/Applications/GIMP.app是否存在。尝试使用--args --help-all失败的原因是该应用程序没有在shell的上下文中运行,其stdout和stderr流继承自shell。它作为"init"进程的子进程运行。因此,--help-all参数没有做任何有用的事情,因为进程退出时没有在shell中显示任何信息(假设GIMP尚未运行(。open命令是一个错误的工具,你正在尝试做什么。

ps aux检查进程名称很简单。例如,当我的Atom(一个文本编辑器应用程序(打开时,我看到实际的应用程序是从/Applications启动的

> ps aux | grep Atom
junji            63388   0.3  1.4 41357168 460532   ??  S     3:46PM   0:02.96 /Applications/Atom.app/Contents/MacOS/Atom

相关内容

  • 没有找到相关文章

最新更新