我想通过脚本在OSX上启动应用程序。我需要通过命令行参数。不幸的是,open
不接受命令行参数。
我能想到的唯一选择是用于nohup myApp > /dev/null &
启动我的应用程序,以便它可以独立于启动它的脚本而存在。
还有更好的建议吗?
我想通过脚本在OSX上启动应用程序。我需要通过命令行参数。不幸的是,open
不接受命令行参数。
我能想到的唯一选择是用于nohup myApp > /dev/null &
启动我的应用程序,以便它可以独立于启动它的脚本而存在。
还有更好的建议吗?
Answers:
在OS X 10.6中,open
命令得到了增强,可以将参数传递给应用程序:
open ./AppName.app --args -AppCommandLineArg
但对于旧版本的Mac OS X的,因为应用程序包不是用来传递命令行参数,传统的方法是使用Apple事件的文件喜欢这里的Cocoa程序或在这里为Carbon程序。您还可以通过使用环境变量传递参数来做一些麻烦的事情。
open
如答案所示,打开的GUI应用程序并非旨在从命令行运行。“为什么?” 因为这就是Mac OS X的方式。
如这里的问题所述open
,10.6中的命令现在具有一个args
标志,因此您可以调用:
open -n ./AppName.app --args -AppCommandLineArg
应用程序捆绑包(.app
文件)实际上是一堆目录。除了使用open
和.app
名称之外,您实际上可以移至其中并启动实际的二进制文件。例如:
$ cd /Applications/LittleSnapper.app/
$ ls
Contents
$ cd Contents/MacOS/
$ ./LittleSnapper
那是实际的二进制文件,可能接受参数(在LittleSnapper
情况下则不)。
DYLD_LIBRARY_PATH
,DYLD_FRAMEWORK_PATH
。
open
也有一个-a标志,您可以用它的名称(或带有-b标志的捆绑包标识符)从Applications文件夹中打开一个应用程序。您可以将其与--args选项结合使用以获得所需的结果:
open -a APP_NAME --args ARGS
要在VLC播放器中打开应以2倍缩放并循环播放的视频,您可以示例一下:
open -a VLC --args -L --fullscreen
请注意,我无法将命令输出到终端。(尽管我没有尝试解决任何问题)
open -a
故意重复?无论如何, open -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir=/Users/an/userll
这对我不起作用。
我想运行两个单独的Chrome实例,每个实例都使用自己的配置文件。我希望能够从Spotlight启动它们,这是我启动Mac应用程序的习惯。换句话说,我需要两个常规的Mac应用程序(regChrome
用于正常浏览和altChrome
使用特殊的配置文件),可以轻松地通过键入⌘-space来调出Spotlight,然后按“ reg”或“ alt”,然后按Enter来轻松启动。
我认为,实现上述目标的蛮力方式是使用相应名称制作Google 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 &"
第二行以替代配置文件(--user-data-dir
参数)启动Chrome 。
第一行是尝试为两个应用程序提供不同图标的尝试,但未成功。最初,它似乎工作正常。但是,Chrome迟早会重新读取其图标文件,并获取与最后启动的两个应用程序中的任何一个相对应的图标文件,从而导致两个运行中的应用程序具有相同的图标。但是我没有费心去尝试修复它-我将两个浏览器都放在单独的桌面上,并且在它们之间导航并不是问题。
从OS X Yosemite开始,我们现在可以使用AppleScript和Automator来自动化复杂的任务。现在可以将自动化JavaScript用作脚本语言。
该页面提供了一个很好的示例脚本示例,可以使用bash和osascript交互模式在命令行中编写脚本。它会打开Safari标签并导航到example.com
。
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;
为什么不只是将添加路径设置为应用程序的bin。对于MacVim,我执行了以下操作。
export PATH=/Applications/MacVim.app/Contents/bin:$PATH
别名是我尝试的另一种选择。
alias mvim='/Applications/MacVim.app/Contents/bin/mvim'
alias gvim=mvim
使用导出路径,我可以调用应用程序中的所有命令。对于MacVim的测试,参数通过得很好。别名,我必须对bin中的每个命令都使用别名。
mvim README.txt
gvim Anotherfile.txt
享受别名和PATH的强大功能。但是,在升级操作系统时,您确实需要监视更改。
很简单,在这里用您要启动的应用程序名称替换“ APP”。
export APP_HOME=/Applications/APP.app/Contents/MacOS
export PATH=$PATH:$APP_HOME
待会儿谢谢
nohup &
解决问题?