簡體   English   中英

在打開位置 AppleScript 上運行終端命令

[英]Run a Terminal command on open location AppleScript

當調用自定義 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 處理程序

所以這將處理傳入的 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 ""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM