Applescript Service ล้มเหลวเนื่องจากข้อ จำกัด ที่ขาดหายไป


2

ฉันเขียนบริการอัตโนมัติซึ่งเรียกใช้งานแอปพลิเคชั่นขนาดเล็กเพื่อตั้งระดับเสียงและเล่นเสียง

เพื่อเปิดใช้งานบริการที่ผมคัดลอกมันลงไปและไม่/Library/Services chmod +xในการลงทะเบียนแป้นพิมพ์ลัดสำหรับบริการฉันวิ่งไปdefaults write -g NSUserKeyEquivalents '{"HelloWorld" = "$@~1";}'ที่HelloWorldชื่อบริการตามที่เห็นในเมนูบริการและ$@~1ทางลัดของฉัน (ซึ่งแก้ไขเป็น⌘ + ⌥ + ⇧ + 1)

หลังจากรีบูตฉันสามารถดูบริการในเมนูด้วยทางลัดถัดจากมัน เมื่อฉันกดคีย์ผสมที่ต้องการการแจ้งเตือนจะปรากฏขึ้นบอกฉันว่าสคริปต์พบข้อผิดพลาด นอกจากนี้ยังมีข้อผิดพลาดปรากฏในบันทึก:

ตรวจพบข้อ จำกัด ที่หายไปสำหรับ ไม่สามารถวางได้เนื่องจากมีข้อ จำกัด ไม่เพียงพอที่จะกำหนดขนาดและแหล่งกำเนิดอย่างเต็มที่ เพิ่มข้อ จำกัด ที่หายไปหรือตั้งค่า translateatesAutoresizingMaskIntoConstraints = YES และข้อ จำกัด จะถูกสร้างขึ้นสำหรับคุณ หากมุมมองนี้ถูกจัดวางด้วยตนเองใน macOS 10.12 และใหม่กว่าคุณอาจเลือกที่จะไม่เรียก [super layout] จากการแทนที่ของคุณ ตั้งค่าเบรกพอยต์บน DETECTED_MISSING_CONSTRAINTS เพื่อดีบัก ข้อผิดพลาดนี้จะถูกบันทึกเพียงครั้งเดียว

สิ่งนี้แสดงข้อผิดพลาดเกี่ยวกับมุมมองบางอย่างที่ไม่ได้เริ่มต้นอย่างถูกต้อง แต่ฉันไม่ได้ใช้มุมมองใด ๆ

นี่คือเนื้อหาของ Automator Workflow:

on run

    if (get output volume of (get volume settings)) < 50 then
        set volume output volume 50
    end if

    do shell script "afplay /Library/Application\ Support/HelloWorld/hello.mp3"

    return
end run

ฉันแก้ไขมันแล้ว คุณไม่สามารถยกเว้นช่องว่างด้วยการdo shell scriptโต้แย้ง ฉันต้องใส่ชื่อไฟล์ในเครื่องหมายคำพูดคู่ (ซึ่งคุณสามารถหลบหนีได้) ข้อความแสดงข้อผิดพลาดทำให้เข้าใจผิดอย่างหนาแน่น!
Lerk

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

โปรดแก้ไขคำถามของคุณด้วยการสะกดคำว่า "ช่องว่างที่หลบหนี" ของคุณไม่ถูกต้องในอาร์กิวเมนต์สคริปต์เชลล์ @clemsamlang ฉันไม่เข้าใจสิ่งที่คุณหมายถึงโดยขออภัย
Lerk

สิ่งที่ฉันหมายถึงคือคุณสามารถเขียนสั้น ๆ "[แก้ไข: ฉันพบคำตอบดูที่คำตอบที่ฉันเลือก]" ในตอนต้นของคำถาม . . . (ฉันจะลบความคิดเห็นก่อนหน้าขณะที่คุณโพสต์ "การค้นพบ" ของคุณ) ขอบคุณและ +1
clemsam lang

คำตอบ:


1

เนื่องจากมีการร้องขอในความคิดเห็น (ขออภัยต้องใช้เวลานาน) นี่เป็นสคริปต์เวอร์ชันใช้งานได้ เคล็ดลับคือการใส่ชื่อไฟล์ (ซึ่งมีช่องว่าง) ลงในเครื่องหมายคำพูดคู่เพราะสิ่งเหล่านั้นสามารถหลบหนีได้

on run

    if (get output volume of (get volume settings)) < 50 then
        set volume output volume 50
    end if

    do shell script "afplay \"/Library/Application Support/HelloWorld/hello.mp3\""

    return
end run

1
การเว้นวรรคที่ถูกหลบหนีนั้นทำได้ดีในdo shell script คำสั่งคุณเพียงแค่ใช้เครื่องหมายแบ็กสแลชสองอันไม่ใช่ช่องว่างเมื่อหนีช่องว่างในdo shell script คำสั่งเช่นdo shell script "afplay /Library/Application\\ Support/HelloWorld/hello.mp3"จะทำงานได้ดี!
user3439894
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.