Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何检查Mac OS中是否安装了特定的应用程序/软件_Macos_Installation - Fatal编程技术网

Macos 如何检查Mac OS中是否安装了特定的应用程序/软件

Macos 如何检查Mac OS中是否安装了特定的应用程序/软件,macos,installation,Macos,Installation,我想检查是否使用Perl/Shell脚本在Mac OS中安装了特定的应用程序。 我正在使用PackageMaker编写软件包,在安装应用程序之前,我需要检查用户机器上的几个应用程序。 因此,我计划写一个脚本,将为我检查这一点。 如果我可以更好地执行此操作,请给出建议。您可以使用system\u profiler命令执行此操作。试着这样做: system_profiler SPApplicationsDataType | grep AppName 以下bash脚本使用AppleScript检查应

我想检查是否使用Perl/Shell脚本在Mac OS中安装了特定的应用程序。 我正在使用PackageMaker编写软件包,在安装应用程序之前,我需要检查用户机器上的几个应用程序。 因此,我计划写一个脚本,将为我检查这一点。
如果我可以更好地执行此操作,请给出建议。

您可以使用
system\u profiler
命令执行此操作。试着这样做:

system_profiler SPApplicationsDataType | grep AppName

以下bash脚本使用AppleScript检查应用程序是否已安装,基于:


大多数情况下,所有第三方应用程序都安装在Applications文件夹中。最简单的方法就是grep通过它

ls /Applications/ | grep -i APP_NAME
只要用你想要的东西替换APP_名称即可。“-i”使grep不区分大小写,因此除非安装了一些主要的拼写错误,否则它将列出文件。否则它将不返回任何内容。

补充:

下面是通用
bash
函数
,这些函数通过返回应用程序的路径或包ID(如果已安装)来扩展测试应用程序是否已安装。如果您将它们放在bash概要文件中,它们也可以方便地用于交互式使用

这两种功能都可以用来测试是否安装了应用程序;e、 g.:
if!whichap'someApp'&>/dev/null;然后…#未安装

这两个函数都不区分大小写,并且在指定名称时,
.app
后缀是可选的。 但是,请注意,无法识别本地化名称

whichap
通过bundle ID或name查找应用程序的函数。 返回应用程序的路径(如果找到);否则,将报告错误

示例:

  • whichapfinder#->'/System/Library/CoreServices/finder.app/'
  • whichapcom.apple.finder#->'/System/Library/CoreServices/finder.app/'
bundleid
给定应用程序的名称,返回其包ID

例如:

  • bundleid finder#->“com.apple.finder”

实施说明:在AppleScript代码中,很容易绕过Finder上下文,简单地使用例如
application[id],但由于此类应用程序不是永久安装的(不是永久注册到macOS启动服务),因此会发出警告。
如果需要,您可以轻松地修改函数以报告错误

资料来源:bundleid
bundleid(){
osascript-e“应用程序id\”$1\“”2>/dev/null ||
{echo“$FUNCNAME:错误:找不到指定名称的应用程序:$1”1>&2;return 1;}
}

可能在/Applications中查找application.app文件?Applescript可能是测试是否可以启动应用程序的一个选项。不知道这是否违反了perl/shell。@JoePasq,用户也可以在其他位置安装应用程序。这很好,但对于只对特定应用程序感兴趣的脚本来说,可能太慢了。正如您所暗示的,应用程序可以在其他位置,尤其是
~/applications
,但即使在其他位置,非标准位置。因此,@bavariable”解决方案更可取。但例如,如果我安装了一个不在应用程序文件夹中的Cmake,在这种情况下,我如何检查是否安装了Cmake,以及如何正确删除Cmake.Cool内容。这里有一个更简洁的变体:一个bash函数,它接受一个bundle ID并在找到时返回应用程序的路径,否则返回一个空字符串:
getAppPathByBundleId(){osascript-e'try'-e'告诉应用程序“Finder”以文本'-e'end try';}
的形式返回POSIX路径(应用程序文件ID的路径““$1”)。另请参阅我的答案,以通过应用程序名称进行测试并查找应用程序的捆绑ID。(请注意,正如我刚刚了解的那样,绕过查找程序上下文,只需使用例如
application ID“com.apple.members”
,这很有诱惑力,但会隐式启动指定的应用程序。)此方法还列出用于安装应用程序的垃圾箱或已装入卷中的应用程序。我认为这些应用程序不应被视为“已安装”的应用程序。@WonderDog:从已安装的卷重新安装应用程序很好:我修改了函数以报告这种情况下的警告,但如果需要,您可以很容易地将其更改为错误(或者在事实发生后过滤掉
/volumes/…
匹配项)。在macOS 10.13.6上,我看不到垃圾应用程序的症状-您使用的是哪个版本?
$ ./appinst.sh com.apple.preview
$ echo $?
1
$
$ ./appinst.sh nonono
$ echo $?
0
$
ls /Applications/ | grep -i APP_NAME