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

psy*_*tik 103 macos

我想从脚本中启动OSX上的应用程序.我需要传递命令行参数.不幸的是,open不接受命令行参数.

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

有更好的建议吗?

Joh*_*ell 103

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

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


Ned*_*ily 73

在OS X 10.6中,该open命令已得到增强,允许将参数传递给应用程序:

open ./AppName.app --args -AppCommandLineArg
Run Code Online (Sandbox Code Playgroud)

但对于旧版本的Mac OS X的,因为应用程序包不是用来传递命令行参数,传统的方法是使用苹果活动的文件,就像在这里为Cocoa程序或在这里为Carbon程序.你也可以通过在使用环境变量中传递参数来做一些事情.

  • 可能不是.如果它适合你,那就去吧.更重要的一点是,open(1)是当用户在Finder中进行双击或"打开"时发生的事情的cli等价物,并且这些机制都不支持传统的命令行参数. (2认同)
  • 告诉谷歌不要使用命令行参数,Applications/Google Chrome.app/Contents/Versions/6.0.472.53/Google Chrome Helper.app/Contents/MacOS/Google Chrome Helper --type = renderer --lang = en-US - -force-fieldtest (2认同)

NSS*_*Sec 32

应用程序包(.app文件)实际上是一堆目录.您可以实际移入它并启动实际的二进制文件,而不是使用open.app名称.例如:

$ cd /Applications/LittleSnapper.app/
$ ls
Contents
$ cd Contents/MacOS/
$ ./LittleSnapper
Run Code Online (Sandbox Code Playgroud)

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

  • 我相信二进制文件接受参数.我写的.调用'open'不允许传递参数.我很确定这一点.是的,我的脚本直接调用'open binary',而不是尝试打开bundle. (3认同)
  • 这种方法有一个主要缺点:如果捆绑包包含自定义库和框架,您将需要摆弄`DYLD_LIBRARY_PATH`、`DYLD_FRAMEWORK_PATH`。 (2认同)

小智 19

您可以使用以下方式启动应用程序open

open -a APP_YOU_WANT
Run Code Online (Sandbox Code Playgroud)

这应该会打开您想要的应用程序。


小智 14

如果您的应用需要处理文件(您通常希望传递的内容为:)./myApp *.jpg,您可以这样做:

open *.jpg -a myApp
Run Code Online (Sandbox Code Playgroud)


rie*_*333 6

open还有一个 -a 标志,您可以使用它通过应用程序名称(或通过带有 -b 标志的包标识符)从应用程序文件夹中打开应用程序。您可以将其与 --args 选项结合起来以获得您想要的结果:

open -a APP_NAME --args ARGS
Run Code Online (Sandbox Code Playgroud)

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

open -a VLC --args -L --fullscreen
Run Code Online (Sandbox Code Playgroud)

请注意,我无法将命令的输出发送到终端。(虽然我没有尝试任何方法来解决这个问题)