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

sud*_*oer 78 dock application-launch command-line-arguments macos

我正在尝试按照在 Chrome 中固定启动选项卡的说明进行操作。在 OS X 上,如何将命令行参数添加到我的 Dock 中持续存在的项目?

Dan*_*eck 102

您基本上有两种选择:

选项 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
Run Code Online (Sandbox Code Playgroud)

保存在任何你喜欢的地方。

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

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


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

右键单击Google Chrome.app并选择Show Package Contents。转到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
Run Code Online (Sandbox Code Playgroud)

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

#!/usr/bin/env bash
exec /Applications/Firefox.app/Contents/MacOS/firefox-bin -ProfileManager
Run Code Online (Sandbox Code Playgroud)

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

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

chmod +x /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh
Run Code Online (Sandbox Code Playgroud)

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

现在,当您打开应用程序时,它会实际执行该.sh文件,进而启动实际的可执行文件,同时发送命令行参数。

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

  • “将您的应用程序移动到不同的文件夹并再次返回”应该是粗体 - 第一次阅读时完全错过了:) (6认同)
  • 当然,选项 2 仅适用于非 CodeSign 应用程序。如果它来自苹果或应用程序商店,则会针对更改进行签名。即使更改 Info.plist 也会阻止它。在这种情况下,一个简单的存根/包装应用程序会有所帮助。 (2认同)

Kev*_*eid 10

您可以编写一个启动 Chrome 的脚本,但这不会是 Dock 中的应用程序图标,它会导致出现一个单独的 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
      
      Run Code Online (Sandbox Code Playgroud)

      不要忘记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
      
      Run Code Online (Sandbox Code Playgroud)
    • 我看到 Chrome 包有一些关于代码签名的内容;您可能需要删除CodeResources和/或_CodeSignature使其与这些更改一起运行。

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