运行 打开位置 AppleScript 的终端命令

Run a Terminal command on open location AppleScript

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

示例:

我想打开一个终端,然后 运行 当有人在浏览器中打开 myapp://hello 或当有人执行 open "myapp://hello" 时回显 "hello myapp://hello" =15=]

我是 apple script 的新手,所以我搜索了很多但无法得出有效的代码片段。

我试过了:

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 处理程序

因此这将处理传入的 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 ""