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

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

我正在尝试按照以下说明进行操作在 Chrome 中固定启动选项卡。在 OS X 上,如何向保留在 Dock 中的项目添加命令行参数?

答案1

你基本上有两个选择:

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

启动 Automator 并选择创建应用。 双击运行 Shell 脚本在里面图书馆/公共事业文件夹并将文本内容 — 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-binFirefox)。将其替换为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

现在,关闭终端并将您的应用程序(现在不能正在运行)移至其他文件夹并返回。这将更新发射服务,否则您的更改将被忽略并令您极为恼火。

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

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

答案2

您可以编写一个启动 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
      

      别忘了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 中,应用程序通常情况下通过可以嵌入选项的快捷方式启动)。

相关内容