在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一样检查路径时,此脚本不会启动应用程序。
由于它只是grep
的lsregister
的转储结果,所以它可能不如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