使用命令行启动OS X上的应用程序

我想从脚本启动OSX上的应用程序。 我需要通过它的命令行参数。 不幸的是,“开放”不接受命令行参数。

我能想到的唯一select是使用'nohup myApp> / dev / null&'启动我的应用程序,以便它可以独立于启动它的脚本而存在。

有更好的build议吗?

在OS X 10.6中, open命令已得到增强,以允许将parameter passing给应用程序:

 open ./AppName.app --args -AppCommandLineArg 

但是,对于较旧版本的Mac OS X,由于应用程序捆绑并不是为传递命令行参数而devise的,因此传统机制是使用Apple Events 来处理cocoa应用程序或Carbon应用程序。 你也可以通过使用环境variables传递参数来做一些kludgey。

正如在这里提到的,现在10.6中的'open'命令有一个'args'标志,所以你可以调用:

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

一个应用程序包(一个.app文件)实际上是一堆目录。 而不是使用“打开”和.app名称,你可以实际移动到它并启动实际的二进制文件。 例如:

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

这是可能接受参数的实际二进制文件(或者,在LittleSnapper的情况下)。

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

 open *.jpg -a myApp 

我会推荐MathieuK提供的技术。 就我而言,我需要用Chromium来试用它:

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

我意识到这并不能解决OP的问题,但希望能节省别人的时间。 🙂

从OS X 10 Yosemite开始,我们现在可以使用AppleScript和Automator来自动完成复杂的任务。 JavaScript for Automation现在可以用作脚本语言。

这个页面给出了一个很好的示例脚本 ,可以使用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; 

随着苹果:

 tell application "Firefox" to activate 

open也有一个-a标志,您可以使用它来打开应用程序文件夹内的应用程序文件夹的名称(或通过使用-b标志的包标识符)。 你可以把它和–args选项结合起来,以达到你想要的结果:

 open -a APP_NAME --args ARGS 

要在VLC播放器中打开一个应该以2倍的比例缩放的video并循环播放,例如:

 open -a VLC --args open -a --scale 0.5 -L yourvid.mp4 

请注意,我无法获得命令的输出到terminal。 (虽然我没有试图解决这个问题)

我希望有两个单独的Chrome运行实例,每个都使用自己的configuration文件。 我希望能够从Spotlight启动它们,因为我的习惯是启动Mac应用程序。 换句话说,我需要两个普通的Mac应用程序, regChrome进行正常浏览, altChrome使用特殊configuration文件,通过键入⌘-space来调出Spotlight,然后input'reg'或'alt'来轻松启动。

我认为完成上述目标的蛮力方法是在相应的名称下创buildGoogle Chrome应用程序包的两个副本。 但这是丑陋的,更新复杂。

我最终得到的是两个包含两个命令的AppleScript应用程序。 这是altChrome的一个:

 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 &" 

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

第一行是不成功的尝试给两个应用程序不同的图标。 最初,它似乎工作正常。 不过,Chrome迟早会重新读取其图标文件,并获取最后两个应用程序中哪个应用程序相对应的图标文件,从而导致两个具有相同图标的正在运行的应用程序。 但我并没有费心尝试修复它 – 我把两个浏览器放在不同的桌面上,在它们之间导航并不成问题。