2013-07-29 77 views
2

我正在使用automator创建osx服务,以显示文件的上下文菜单项,例如Dropbox如何显示下面的菜单。如何创建将其服务名称传递给shell脚本的osx服务?

Dropbox right click context menu

据我所知,这些都不是OSX的服务,但不过,我想喜欢完成同样的事情与OSX服务。因此,我创建了2个使用automator的Finder.app文件和文件夹的osx服务,并附加了一个shell脚本动作。

现在我可以看到我所有的2个服务(分享用,分享二)在上下文菜单中像下面

enter image description here

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

不知道如何获得shell脚本内用户选择的服务的服务名称,如我们在命令行参数“$ @”

+0

这似乎并不容易。我尝试过:1)为当前工作流程的路径和名称寻找一个Automator预定义变量,但我没有找到这样的变量。 2)我尝试了AppleScript命令:“给我的路径”,但是它给出了运行工作流的程序的路径。您可以提供应用程序需要的什么内容,以便使用Automator操作“运行Shell脚本”从服务中启动它需要的数据? – Kaydell

+0

感谢Kaydell的评论。基本上我的目标是打开一个浏览器,每个菜单项的URL都不相同。我会做的是,我将通过传递文件和服务名称的路径从shell脚本启动一个app/exe,以便应用程序可以通过从数据库中读取文件详细信息来基于服务名称构造url在浏览器中加载网址。 – Engineer

回答

1

获取文件名“基本上我的目标是打开一个浏览器的URL这对于每个菜单项都是不同的。“

类似下面的AppleScript可以用来打开默认的Web浏览器的URL,使用AppleScript:

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

像下面的shell脚本的东西可以用来从壳打开一个URL :

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

使用Finder打开网址,比使用Safari,因为当您使用Finder打开的网址,你会得到默认的浏览器,而不是总是让Safari浏览器更好。

“我将通过传递文件的路径&服务名称,以便应用程序可以从数据库中并加载读取文件的细节构造基于服务名称URL启动从shell脚本的应用程序/ EXE浏览器中的网址。“

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

- Kaydell
[email protected]

+0

感谢您的详细解释。我有一个与多文件选择有关的疑问。首先,我们是否有任何控制措施不要显示文件夹和多重选择的服务。如果没有,我们如何确定该服务是由于多个文件选择点击而被踢入的。我注意到$ @只给出了一个文件的路径。 – Engineer

+0

对不起。我可以看到shell脚本被所有文件调用为命令行参数。无论如何,无论如何,我们可以只显示服务条目,而不是文件夹? – Engineer

+0

由于您正在开发.app,因此最好的做法是将服务构建到应用程序中。这是我刚刚开始的一个Mac编程Wiki的链接。 http://www.learnbymac.com/wiki/index.php?title=Services_Menu你应该看到的是在这个页面的底部,有一个链接到Apple的一个名为“SimpleService”的项目。它应该让您开始使用Xcode将服务构建到应用程序中。 – Kaydell