在打开的位置 AppleScript 上运行终端命令 应用 1:网址处理程序应用 2:终端处理程序

问题描述

我想在调用自定义 url 时在终端中运行命令。

示例:

当有人在浏览器中打开 myapp://hello 或有人执行 open "myapp://hello" 时,我想打开一个终端并运行 echo "hello myapp://hello"

我是苹果脚本的新手,所以我搜索了很多,但无法得出一个有效的代码片段。

我试过了:

on open location this_URL
    display alert this_URL
    tell application "Terminal"
        reopen
        do script "echo 'hello " & this_URL & "'"
        activate
    end tell
end open location

将 Info.plist 更新为:

.....
<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLName</key>
    <string>myapp</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>myapp</string>
    </array>
  </dict>
</array>
....

代码只是打开一个终端,但不运行 echo 命令。 代码的独立部分:

on open location this_URL
    display alert this_URL
end open location

tell application "Terminal"
    reopen
    do script "echo 'hello " & this_URL & "'"
    activate
end tell

完美运行。

但组合不起作用....

请告诉我一些解决方法

提前致谢

解决方法

我认为这是授权问题。

我不知道为什么,但是当我们在 plist 中添加 CFBundleURLTypes 时,macOS 会阻止我们向终端发送事件。

所以这里有一个解决方法:

如下制作 2 个应用程序而不是一个应用程序

应用 1:网址处理程序

所以这将处理传入的 url 将其复制到剪贴板并启动第二个应用程序。 它的applescript如下:

on open location this_URL
    set the clipboard to this_URL
    tell application "/path/to/app2.app" to activate
end open location

将 CFBundleURLTypes 添加到其 plist

应用 2:终端处理程序

它将从剪贴板读取 url,然后在终端上运行它。 它的applescript如下:

tell application "Terminal"
    set this_URL to ( the clipboard as text )
    do script "echo 'hello " & this_URL & "'"
    activate
end tell
set the clipboard to ""