如何在 OS X 上用命令行启动应用程序-最好的方法

我想从一个脚本在 OSX 上启动一个应用程序。我需要通过一些 command line arguments。不幸的是,open不接受命令行 args。

我能想到的唯一选择是使用 nohup myApp > /dev/null &来启动我的应用程序,这样它就可以独立于启动它的脚本而存在。

有更好的建议吗?

227678 次浏览

捆绑(.app文件)实际上是一个目录。与使用 open.app文件名不同,您可以进入应用程序的目录并启动位于其中的实际机器码程序。例如:

$ cd /Applications/LittleSnapper.app/
$ ls
Contents
$ cd Contents/MacOS/
$ ./LittleSnapper

这是可能接受参数的实际二进制可执行文件(在 LittleSnapper中可能不接受参数)。

在 OS X 10.6中,增强了 open命令以允许向应用程序传递参数:

open ./AppName.app --args -AppCommandLineArg

但是对于旧版本的 Mac OS X 来说,由于应用程序包的设计并不是为了传递命令行参数,因此传统的机制是对于像可可应用程序的 给你或 Carbon 应用程序的 给你这样的文件使用 苹果活动。您还可以通过在使用环境变量时传递参数来完成一些复杂的工作。

我会推荐 MathieuK 提供的技术,对我来说,我需要用 Chromium 尝试一下:

> Chromium.app/Contents/MacOS/Chromium --enable-remote-fonts

我知道这不能解决 OP 的问题,但是希望它能节省其他人的时间。 :)

正如问题 给你中提到的,10.6中的 open命令现在有一个 args标志,因此您可以调用:

open -n ./AppName.app --args -AppCommandLineArg

附注:

tell application "Firefox" to activate

如果你的应用程序需要处理文件(你通常希望传递的是: ./myApp *.jpg) ,你可以这样做:

open *.jpg -a myApp

我希望运行两个不同的 Chrome 实例,每个都使用自己的配置文件。我希望能够从 聚光灯启动它们,这是我启动 Mac 应用程序的习惯。换句话说,我需要两个常规的 Mac 应用程序,regChrome用于正常浏览,altChrome用于使用特殊配置文件,可以通过键入 something-space 轻松启动 Spotlight,然后是“ reg”或“ alt”,然后是 Enter。

我认为完成上述目标的最简单的方法就是在各自的名字下复制两份 Google Chrome 捆绑。但是这很丑陋,而且更新很复杂。

我最终得到的是两个 AppleScript应用程序,每个应用程序包含两个命令:

do shell script "cd /Applications/Google\\ Chrome.app/Contents/Resources/; rm app.icns; ln /Users/garbuck/local/chromeLaunchers/Chrome-swirl.icns app.icns"
do shell script "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --user-data-dir=/Users/garbuck/altChrome >/dev/null 2>&1 &"

第二行用备用配置文件(--user-data-dir参数)启动 Chrome。

第一行尝试给两个应用程序提供不同的图标,但没有成功。最初,它似乎工作得很好。然而,迟早有一天,Chrome 会重新读取它的图标文件,并得到与两个应用程序中最后一个启动相对应的图标文件,从而导致两个应用程序使用相同的图标运行。但我并没有费心去解决这个问题ーー我把这两种浏览器放在不同的桌面上,在它们之间导航也不成问题。

OS X 约塞米蒂国家公园开始,我们现在可以使用 AppleScript自动售货机来自动化复杂的任务。用于自动化的 JavaScript 现在可以用作脚本语言。

本页提供了一个很好的示例脚本 ,可以使用 bash 和 Osascript交互模式在命令行中编写该脚本。它打开一个 Safari 选项卡并导航到 example.com

Http://developer.telerik.com/featured/javascript-os-x-automation-example/
osascript -l JavaScript -i
Safari = Application("Safari");
window = Safari.windows[0];
window.name();
tab = Safari.Tab({url:"http://www.example.com"});
window.tabs.push(tab);
window.currentTab = tab;

open还有一个-a 标志,您可以使用该标志根据应用程序文件夹中的应用程序的名称(或者使用带-b 标志的绑定标识符)打开该应用程序。您可以将其与—— args 选项组合起来,以实现所需的结果:

open -a APP_NAME --args ARGS

要在 VLC 播放器中打开一个比例为2倍的视频并循环播放,你可以执行以下命令:

open -a VLC --args -L --fullscreen

注意,我无法将命令输出到终端。(尽管我没有试图解决这个问题)

为什么不只是设置添加路径到应用程序的垃圾箱。

export PATH=/Applications/MacVim.app/Contents/bin:$PATH

化名,是我试过的另一个选择。

alias mvim='/Applications/MacVim.app/Contents/bin/mvim'
alias gvim=mvim

通过导出 PATH,我可以调用应用程序中的所有命令。在我与 MacVim 的测试中,论点通过得很好。然而别名,我必须在每个命令行中使用别名。

mvim README.txt
gvim Anotherfile.txt

享受别名和 PATH 的强大功能。但是,当操作系统升级时,您确实需要监视更改。

很简单,这里用你想要启动的应用程序的名字替换“ APP”。

export APP_HOME=/Applications/APP.app/Contents/MacOS
export PATH=$PATH:$APP_HOME

晚点再谢我。

你可以使用 open启动应用程序:

open -a APP_YOU_WANT

这将打开所需的应用程序。

当你只需要访问应用程序文件夹并输入:

[应用程序名称]

就是这个!

要创建一个新的文本文件或打开一个现有的,在任何文件夹,使用一个文本/代码编辑器,如 MACOSX 的自由文本伴侣应用程序,使用终端上的这个命令:

open -n /Applications/TextMate.app --args "$PWD/some file.txt"

您可以根据应用程序的需求及其对这种语法的支持使用任何文件类型,而不是使用文本文件。

这个命令也在 Windows 上模拟了新文本文档命令,并且已经在 MacBook Pro 2021和蒙特雷12.2.1上成功地进行了测试。