【问题标题】:How to create osx service that passes its service name to shell script?如何创建将其服务名称传递给 shell 脚本的 osx 服务?
【发布时间】:2013-07-30 05:23:38
【问题描述】:

我正在使用 automator 创建 osx 服务以显示文件的上下文菜单项,例如 dropbox 如何显示下面的菜单。

我知道这些不是 osx 服务,但是我想用 osx 服务完成同样的事情。因此,我在 Finder.app 中使用 automator 为文件和文件夹创建了 2 个 osx 服务,并为此附加了一个 shell 脚本操作。

现在我可以在上下文菜单中看到我所有的 2 项服务(与 a 共享,与 b 共享),如下所示

从 shell 脚本(这些服务的操作)正在启动一个应用程序。我想以文件路径和服务名称作为两个命令行参数来启动应用程序。

知道如何在 shell 脚本中获取用户选择的服务的服务名称,就像我们从命令行参数“$@”获取文件名一样

【问题讨论】:

  • 这似乎并不容易。我试过:1)为当前工作流的路径和名称寻找一个Automator预定义变量,但我没有找到这样的变量。 2)我尝试了 AppleScript 命令:“我的路径”,但这给出了运行工作流程的程序的路径。您能否从您的 Automator 操作“运行 Shell 脚本”中提供应用程序需要的服务以及它需要的数据?
  • 感谢 Kaydell 的评论。基本上我的目标是打开一个浏览器,其 URL 对每个菜单项都不同。我将要做的是,我将通过将路径传递给文件和服务名称来从 shell 脚本启动一个应用程序/exe,以便应用程序可以通过从数据库中读取文件详细信息来基于服务名称构造 url 和在浏览器中加载 url。

标签: macos contextmenu automator


【解决方案1】:

“基本上我的目标是打开一个浏览器,其 URL 对每个菜单项都不同。”

类似以下 AppleScript 的内容可用于在默认 Web 浏览器中使用 AppleScript 打开 URL:

tell application "Finder" to open location "http://learnbymac.com"

可以使用类似于以下 shell 脚本的内容从 shell 打开 URL:

open -a "Finder" "http://learnbymac.com"

使用 Finder 打开 URL 比使用 Safari 更好,因为当您使用 Finder 打开 URL 时,您将获得默认浏览器,而不是始终使用 Safari。

" 我将通过将路径传递给文件和服务名称来从 shell 脚本启动一个应用程序/exe,以便应用程序可以通过从数据库中读取文件详细信息来基于服务名称构造 url 并将 url 加载到浏览器。”

启动应用时,您可能需要在工作流的“运行 Shell 脚本”操作中提供服务名称。无论如何,这可能是最好的,因为如果用户更改了服务的名称,您的软件仍然可以运行。我知道最好不要在工作流的捆绑包中重复服务的名称,然后再在“运行 Shell 脚本”操作中重复,但我不知道如何获取当前正在运行的服务的名称。

-- 凯德尔
kaydell@yahoo.com

【讨论】:

  • 感谢您的详细解释。我对多文件选择有疑问。首先,我们是否可以控制不显示文件夹和多选服务。如果不是,我们如何确定由于多个文件选择单击而启动了该服务。我注意到 $@ 只给出了一个文件的路径。
  • 对不起。我可以看到 shell 脚本被调用,所有文件都作为命令行参数。无论如何,我们是否可以仅显示文件而不显示文件夹的服务条目?
  • 既然您正在开发一个 .app,似乎最好的办法就是将服务构建到您的应用中。这是我刚开始的 Mac Programming Wiki 的链接。 learnbymac.com/wiki/index.php?title=Services_Menu 你应该看的是这个页面的底部,有一个指向 Apple 名为“SimpleService”的项目的链接。它应该可以帮助您开始使用 Xcode 将服务构建到应用程序中。
  • "首先,我们是否可以控制不显示文件夹和多选服务?"除了允许选择文件和文件夹的“public.item”之外,您可能还需要使用 UTI。另一个想法是让文件和文件夹被选中并启动服务并让服务过滤掉文件夹,然后如果还有零个项目需要处理,则提醒用户。类似的东西。
  • "我注意到 $@ 只提供了一个文件的路径" 你能给我一个关于 $@ 应该做什么的文档的链接吗?
猜你喜欢
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 2018-12-09
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
相关资源
最近更新 更多