微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在打开的位置 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 ""

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。