如何将命令行参数传递给Dock项?


Answers:


96

您基本上有两个选择:

选项1:使用Automator创建一个应用程序,该应用程序实际上使用命令行参数启动Chrome。

启动Automator并选择创建一个应用程序。双击Library / Utilities文件夹中的Run Shell Script,然后将文本内容—用以下内容替换:cat

open -a "Google Chrome.app" --args -pinned-tab-count=4
# keep the .app suffix or will break with Parallels

保存任何您喜欢的地方。

要替换此应用程序的图标,在真正的Google Chrome上获取信息,单击左上角的图标,然后按Cmd-C,在Chrome Automator应用程序上获取信息,单击该图标,然后按Cmd-V

由于它是不同的应用程序,因此Dock在运行时将显示两个Chrome应用程序:Chrome和您的Chrome启动器。


选项2:编辑您的应用程序捆绑包以启动脚本。该脚本将启动实际应用程序,并添加命令行参数。

右键单击Google Chrome.app并选择显示包装内容。转到Contents/Info.plist在“ 属性列表编辑器/ Xcode(Apple的开发人员工具)”或第三方plist编辑器中打开。

查找条目CFBundleExecutableExecutable File。记住其值(例如,firefox-bin对于Firefox)。替换为parameterized-app.sh

打开终端并输入以下内容:

touch /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh
open /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh

.sh文件的编辑器将打开。将文件内容设置为:

#!/usr/bin/env bash
exec /Applications/Firefox.app/Contents/MacOS/firefox-bin -ProfileManager

(使用从中删除的实际可执行文件的名称Info.plist,添加所需的命令行参数)

保存并关闭。在终端中,输入以下内容:

chmod +x /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh

现在,关闭终端,然后将您的应用程序(现在不能运行)移动到另一个文件夹,然后再次移回。这将更新Launch Services,否则您的更改将被忽略并极大地激怒您。

现在,当您打开应用程序时,它将实际执行该.sh文件,该文件又将启动实际的可执行文件,并发送命令行args。

它的外观和行为将与您期望的一样,但是在更新应用程序时,您将需要重复此操作,因为这通常会替换应用程序包和所做的所有更改。


由于某些原因,我的Chrome 10会忽略命令行参数,并自动固定在上一个会话中固定的选项卡。不知道这里出了什么问题,因为我不是Chrome用户,也不知道它的行为方式。
丹尼尔·贝克

6
“将您的应用程序移至另一个文件夹并再次返回”应为粗体-第一次阅读时完全将其遗漏了:)
stephanos

1
有没有一种方法可以通过shell命令来更新/重置/重新启动启动服务,而不必将应用程序移回或移回?即,以便该步骤很容易编写脚本?
Jordan Brough 2014年

1
@Jordan Brough您可以使用lsregister实用程序强制启动LaunchServices更新:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Hello\ World.app
Will Ross

1
当然,选项2仅适用于非CodeSign应用程序。如果来自苹果或应用程序商店,则对更改进行签名。即使更改Info.plist也将停止它。在这种情况下,一个简单的存根/包装应用程序会有所帮助。
2015年

10

您可以编写一个启动Chrome的脚本,但这不是扩展坞中的应用程序图标,它会导致显示一个单独的Chrome图标。因此,您必须创建一个应用程序包。

首先,复制您的Chrome应用。然后,有两种方法可能会起作用:我不确定Mac OS X和/或Chrome的自我更新功能会更好。

  1. 制作一个“启动程序”,仅使用参数调用Chrome。

    • 打开应用程序包(右键单击→在Finder中显示包内容),然后丢弃除Info.plist,PkgInfo和MacOS之外的所有内容。
    • 在MacOS文件夹中,删除“ Google Chrome”可执行文件,然后将其替换为调用真实Chrome的Shell脚本:

      #!/bin/sh
      exec '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' -pinned-tab-count=4
      

      不要忘记chmod +x脚本。
       

  2. 修改您实际运行的Chrome程序包。

    • 在MacOS文件夹中,重命名“ Google Chrome”并编写一个shell脚本,该脚本使用额外的参数调用真实内容:

      #!/bin/sh
      exec '/Applications/My Modified Google Chrome.app/Contents/MacOS/Google Chrome-real' -pinned-tab-count=4
      
    • 我看到Chrome软件包中有一些有关代码签名的内容;您可能需要删除CodeResources和/或_CodeSignature使其与这些更改一起运行。

这一切都是基于我对Mac应用程序软件包的理解;我实际上并未特别在Chrome上测试这些更改。甚至有可能Mac上的Chrome可执行文件不支持此选项,因为通常不希望Mac应用程序使用可控制的命令行选项运行(例如,与Windows不同,Windows 通常通过快捷方式启动应用程序,有嵌入式选项)。


Chrome支持参数,我只是按照您的说明#2自动执行操作。您确实确实需要为二进制文件指定完整路径,并且完成后不要忘记chmod 755 Google\ Chrome(您的脚本)。实际上,我将脚本命名为launch.sh并将其符号链接到Google \ Chrome,以便于更新。
Orwellophile,2015年

请注意,修改包装内容物会导致问题的代码签名,导致奇的问题,像HTTPS不能正常工作:bridge.grumpy-troll.org/2011/01/...
drevicko
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.