我想从脚本启动OSX上的应用程序。我需要传递它的命令行参数。不幸的是,open
不接受命令行参数。使用命令行在OS X上启动应用程序
我能想到的唯一选择是使用nohup myApp > /dev/null &
启动我的应用程序,以便它可以独立于启动它的脚本而存在。
有什么更好的建议吗?
我想从脚本启动OSX上的应用程序。我需要传递它的命令行参数。不幸的是,open
不接受命令行参数。使用命令行在OS X上启动应用程序
我能想到的唯一选择是使用nohup myApp > /dev/null &
启动我的应用程序,以便它可以独立于启动它的脚本而存在。
有什么更好的建议吗?
在OS X 10.6中,open
命令增强,允许的参数传递给应用程序:
open ./AppName.app --args -AppCommandLineArg
但对于旧版本的Mac OS X的,因为应用程序包没有被设计成传递命令行参数,传统的机制是将Apple Events用于像here这样的文件用于Cocoa应用程序或here用于Carbon应用程序。你也可以通过使用环境变量传递参数来做一些kludgey。
我的kludgey方法是使用nohup直接使用命令行参数调用可执行文件 - 如果环境变量 - kludge减少kludgey? – psychotik 2009-08-20 21:31:55
可能不是。如果它对你有用,就去吧。更大的一点是open(1)是当用户在Finder中进行双击或“打开”时发生的情况的等价物,并且这些机制都不支持传统的命令行参数。 – 2009-08-20 21:52:02
+1:您不应该使用Mac OS X GUI应用程序的命令行参数。 – 2009-08-21 01:53:17
应用程序包(一个.app
文件)实际上是一堆目录。而不是使用open
和.app
名称,您可以实际移动到它并启动实际的二进制文件。例如:
$ cd /Applications/LittleSnapper.app/
$ ls
Contents
$ cd Contents/MacOS/
$ ./LittleSnapper
也就是说实际的可执行文件,可能会接受参数(或不,在LittleSnapper
的情况下)。
我会推荐MathieuK提供的技术。就我而言,我需要用铬来试试吧:
> Chromium.app/Contents/MacOS/Chromium --enable-remote-fonts
我知道这并不能解决OP的问题,但希望这样可以节省别人的时间。 :)
但您需要保持终端打开... – Pacerier 2017-12-15 16:14:25
@Prier将'&'添加到此命令的末尾。它将在后台启动。然后,您可以关闭终端窗口,应用程序可能仍会保持打开状态。 – 2017-12-19 01:01:59
如问题here所提到的,在10.6 open
命令现在有一个args
标志,所以你可以拨打:
open -n ./AppName.app --args -AppCommandLineArg
完全按照要求的方式工作。谢谢 – Durgesh 2013-11-04 10:08:21
这工作,并允许我为Chromium设置zsh别名。谢谢 – jamescampbell 2015-09-03 00:47:04
这个答案很好。只是想补充一点,当你第一次打开终端时,你将会进入你的主目录,所以你可以这样输入,所以你不需要切换到Application目录。我想在不加载字体的情况下运行Gimp,因此我使用-f开关键入以省略字体:open -n /Applications/GIMP.app --args -f – 2015-11-21 15:38:59
在如果你的应用需要处理文件(你通常希望通过的文件是:./myApp *.jpg
),你可以这样做:
open *.jpg -a myApp
这是我正在寻找的!我的实例,例如:'打开something.py - 一个Eclipse.app' – Eric 2014-09-12 21:52:28
我希望有两个独立的Chrome运行实例,每个实例都使用自己的配置文件。我希望能够从Spotlight开始,因为我的习惯是启动Mac应用程序。换句话说,我需要两个普通的Mac应用程序,regChrome
用于正常浏览,altChrome
用于使用特殊配置文件,通过键入⌘-space以调出Spotlight,然后输入'reg'或'alt',轻松启动。
我认为完成上述目标的蛮力方法是在相应的名称下制作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迟早会重新读取其图标文件,并获取与上次启动的两个应用程序相对应的图标文件,从而导致两个具有相同图标的正在运行的应用程序。但我没有试图修复它 - 我将两个浏览器放在不同的桌面上,并且在它们之间导航并不成问题。
Mac是搞砸了。隔离和沙箱是基本的可用性,安全性和健壮性原则。无论如何,为什么不使用'open --args'工作?使用'do shell script'是唯一的方法吗? – Pacerier 2017-12-15 16:21:05
从OS X Yosemite开始,我们现在可以使用AppleScript和Automator来自动完成复杂的任务。用于自动化的JavaScript现在可以用作脚本语言。
This page gives a good example example script可以使用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;
检查脚本编辑器/窗口/库以获取可用的AppleScript自动化应用程序列表。我一直在寻找基于Chrome的Vysor,我想我需要一种不同的方式。 – AnneTheAgile 2016-10-18 16:59:44
ftw更复杂! – Pacerier 2017-12-15 16:15:42
open
也有一个-a标志,你可以用它来从内部打开一个应用程序应用程序文件夹的名称(或通过包标识符与-b标志)。你可以用--args选项一起使用能达到的效果你想:
open -a APP_NAME --args ARGS
要开拓VLC播放的影片,应该用因数2x和循环你会如exectute规模:
open -a VLC --args -L --fullscreen
请注意,我无法将命令输出到终端。 (虽然我没有试图解决这个问题)
我不能跟随这个问题。 “打开”不接受命令行参数?什么是“开放”?这是AppleScript打开吗? 'nohup&'如何解决问题? – 2009-08-20 21:03:30
man open(1) - OS X命令来启动文件或应用程序 – 2009-08-20 21:22:43
这应该在superuser.com – 2009-10-18 02:04:02