Applescript“ คาดหวัง แต่พบตัวระบุ”


0

ในปัจจุบันฉันมีสคริปต์ทุบตีง่าย ๆ ซึ่งเรียกosascript -eหลายครั้ง; ดูเหมือนว่านี้ (เพิ่มบรรทัดใหม่สำหรับการอ่าน):

#!/bin/sh
osascript \
  -e 'tell application "Terminal" to activate' \
\
  -e 'set allWindows to number of windows' \
  -e 'set newTab to true' \
\
  -e 'repeat with i from 1 to allWindows' \
  -e '  set allTabs to number of tabs of window i' \
  -e '  repeat with j from 1 to allTabs' \
  -e '    if custom title of tab j of window i contains "Hi" then' \
  -e '      set frontmost of window i to true' \
  -e '      set selected of tab j of window i to true' \
  -e '      set newTab to false' \
  -e '    end if' \
  -e '  end repeat' \
  -e 'end repeat' \
\
  -e 'if newTab then' \
  -e '  tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' \
  -e '  tell application "Terminal"' \
  -e '    do script ("tabname $2") in selected tab of the front window' \
  -e '    set custom title of selected tab of the front window to "$2"' \
  -e '  end tell' \
  -e 'end if' \
\
  -e 'tell application "Terminal" to do script ("$1") in selected tab of the front window'

แนวคิดเบื้องหลังคือให้ฉันเรียกสิ่งที่ต้องการ~/term.sh pwd Hiเปิดแท็บเทอร์มินัลใหม่พร้อมชื่อ "สวัสดี" แล้วโทรpwdเข้าไปข้างใน

222:227: syntax error: Expected “then”, etc. but found identifier. (-2741)ปัญหาเดียวก็คือว่าข้อผิดพลาดด้วย ฉันถือว่านี่หมายความว่าifa หายไปthenแต่ไม่สามารถเห็นได้เลย อีกความคิดหนึ่งที่ฉันมีคือ 222: 227 หมายถึงคอลัมน์ แต่อีกครั้งฉันไม่เห็นว่าคอลัมน์เหล่านั้นของคำสั่งนั้นผิดอย่างไร

มีใครบ้างที่สามารถชี้ให้ฉันไปในทิศทางที่ถูกต้องได้ไหม

คำตอบ:


3

ก่อนที่คุณจะลองเรียกใช้สคริปต์ที่ไม่น่ารำคาญosascriptลองใช้คอมไพล์ก่อน (ถ้าเป็นไปได้) ใน Script Editor

เมื่อฉันรวบรวมสคริปต์ของคุณใน Script Editor มันจะเปิดเผยว่าสคริปต์ของคุณกำลังพยายามใช้คำว่าcustom title- เป็นคำศัพท์เฉพาะเทอร์มินัล - โดยไม่มีการกำหนดเป้าหมายเทอร์มินัลดังนั้นจึงไม่มีคำดังกล่าว ขยายบรรทัดแรกของคุณtell … to …เป็นtellบล็อก:

tell application "Terminal Latest"
    activate

    set allWindows to number of windows
    set newTab to true

    repeat with i from 1 to allWindows
        set allTabs to number of tabs of window i
        repeat with j from 1 to allTabs
            if custom title of tab j of window i contains "Hi" then
                set frontmost of window i to true
                set selected of tab j of window i to true
                set newTab to false
            end if
        end repeat
    end repeat
end tell

if newTab then
    tell application "System Events" to tell process "Terminal" to keystroke "t" using command down
    tell application "Terminal Latest"
        do script ("tabname $2") in selected tab of the front window
        set custom title of selected tab of the front window to "$2"
    end tell
end if

tell application "Terminal Latest" to do script ("$1") in selected tab of the front window

แต่คุณจะพบว่ารหัสนี้ยังใช้งานไม่ได้เพราะคุณกำลังพยายามใช้ตัวแปรเชลล์$1และ$2ภายในสตริงที่มีเครื่องหมายคำพูดเดี่ยวซึ่งเชลล์จะไม่ตีความพวกเขา ดังนั้นคุณจะต้องแยกการอ้างอิงของบรรทัดเหล่านั้นเช่นในosascriptการเปลี่ยนแปลงคำสั่งของคุณ

-e 'do script ("tabname $2") in selected tab of the front window'

ไปยัง

-e 'do script "tabname '"$2"'" in selected tab of the front window'

[ยังไม่ทดลอง.]

นอกจากนี้วงเล็บยังไม่จำเป็น

แต่ถ้าคุณเก็บในแฟ้มสคริปต์ shebang osascriptคุณไม่จำเป็นต้องใช้เปลือกเพื่อเรียกใช้ คุณสามารถเปลี่ยนบรรทัดแรกเป็น

#!/usr/bin/osascript

จากนั้นเพียงแค่ใส่รหัส AppleScript ของคุณหลังจากนั้นโดยไม่ใช้-eตัวเลือกโดยมีเครื่องหมายแบ็กสแลชต่อเนื่องแบบบรรทัดเดียวหรือแบบต่อเนื่อง

ท้ายที่สุดเนื่องจาก AppleScript สนับสนุน#อักขระความคิดเห็นแฮชคุณสามารถแก้ไขรวบรวมและเรียกใช้osascriptสคริปต์ Shebang ในสคริปต์ Editor ได้(ตามความเหมาะสม)

อัปเดต:หนึ่งนาทีต่อมาฉันรู้ว่าคุณต้องการส่งอาร์กิวเมนต์บรรทัดคำสั่งไปที่สคริปต์ ดังนั้นคุณต้องการใช้เชลล์เพื่อรันosascriptเคสของคุณ อย่างไรก็ตามคุณสามารถทำให้สิ่งต่าง ๆ ง่ายขึ้นโดยใช้เอกสารที่นี่เพื่อวางสคริปต์แบบอินไลน์:

osascript<<EOF
    <your script here>
EOF

ตัวแปร / อาร์กิวเมนต์จะถูกขยาย


0

วิธีนี้อาจช่วยคุณได้สองสามวิธีในการแก้ไขปัญหาของคุณฉันเชื่อว่า: https://stackoverflow.com/questions/6964486/osascript-syntax-error-expected-end-of-line-but-found-command 2741


คุณอาจต้องการเพิ่มสิ่งนี้เป็นความคิดเห็นแทนคำตอบ
ปอตไลท์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.