ฉันมีสคริปต์เรียกใช้งานที่คำสั่งที่ฉันพยายามเรียกใช้นั้นมีข้อผิดพลาด (เห็นได้ชัดว่าไม่ใช่คำตอนนี้) บ่นเกี่ยวกับการใช้งานที่ไม่เหมาะสม
ข้อผิดพลาดเฉพาะที่ฉันได้รับคือข้อความการใช้งานคำสั่งที่ทิ้งลงในบันทึกของระบบ จากนี้ฉันอนุมานข้อมูลอื่น ๆ (เส้นทางไปยังคำสั่งเวลา ฯลฯ ) ในการวางแผนจะถูกแยกวิเคราะห์อย่างถูกต้องเพียงไม่ตัวเลือกคำสั่ง
หลังจากการใช้คำสั่งฉันมีหนึ่งบรรทัดสุดท้าย:
18/11/2013 09:30:00.101 com.apple.launchd.peruser.501: (fake.lable.seti[33833]) Exited with code: 1
แต่นั่นหมายถึง "ฉันออกโดยมีข้อผิดพลาด"
ฉันรู้ว่า launchd แยกคำสั่งออกจากตัวเลือกและในหน้า man จะบอกคุณเกี่ยวกับ ProgramArguments: "... โปรดทราบ: ผู้คนจำนวนมากสับสนโดยกุญแจนี้โปรดอ่าน execvp (3) อย่างระมัดระวังมาก! .. "
ฉันอ่าน execvp (3) และฉันก็ไม่มีปัญญาดังนั้นฉันจึงขอร้องคุณมาก ๆ
โดยปกติการรันคำสั่งจากเทอร์มินัลจะเป็นดังนี้:
/Library/Application\ Support/BOINC\ Data/boinccmd --host localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update
มันทำงานได้ดี
และนี่คือวิธีที่ฉันแยกมันในส่วน Program / ProgramArguments ของ LaunchAgent plist ของฉัน:
<key>Program</key>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
<array>
<string>--host localhost</string>
<string>--passwd gobbledygook</string>
<string>--project http://setiathome.berkeley.edu/ update</string>
</array>
(สำหรับบันทึกฉันเดิมมีเส้นทางที่จะ boinccmd \ หนีออกมา แต่ไม่ได้ผล Launchd หนีช่องว่างในเส้นทางสำหรับคุณ)
ฉันพยายามแยกข้อโต้แย้งลงไปอีก:
<key>Program</key>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
<array>
<string>--host</string>
<string>localhost</string>
<string>--passwd</string>
<string>gobbledygook</string>
<string>--project</string>
<string>http://setiathome.berkeley.edu/</string>
<string>update</string>
</array>
แต่นั่นก็ไม่ได้ผลเหมือนกัน
เช่นเคยฉันแน่ใจว่าฉันขาดอะไรง่าย ๆ ไปเลย
ขอบคุณ
ตอบ:
บรรทัดแรกของ ProgramArguments ต้องเป็นพา ธ ไปยังโปรแกรม นี่คือสิ่งที่ทำให้ฉันสะดุดและแน่นอนว่า "... โปรดอ่านอย่างระมัดระวังมาก!!" ความคิดเห็น :) ฉันยังพบว่าฉันต้องแยกข้อโต้แย้งออกเป็นส่วน ๆ เมื่อฉันมีทุกอย่างในสถานที่สิ่งทั้งหมดที่ทำงานมีเสน่ห์ ขอบคุณมาก.
<key>Program</key>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
<array>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<string>--host</string>
<string>localhost</string>
<string>--passwd</string>
<string>gobbledygook</string>
<string>--project</string>
<string>http://setiathome.berkeley.edu/</string>
<string>update</string>
</array>
การแก้ไขขั้นสุดท้ายเพื่ออธิบายคำอธิบายที่เข้าใจง่ายว่าทำไมจึงเป็นเช่นนี้ดูคำอธิบายของ SirPavlova
~ W
<string>--host localhost</string>
จะไม่ทำงานแน่นอน โปรดจำไว้ว่าเมื่อคุณเขียนบรรทัดคำสั่งไปยังเชลล์มันไม่ทราบว่าส่วนหนึ่งของตัวเลือกและอะไรคืออาร์กิวเมนต์ปกติ - เพียงแค่แยกช่องว่างก่อนส่งอาร์กิวเมนต์ไปยังโปรแกรมที่กำลังทำงานอยู่ นอกจากนี้ยังอาจช่วยได้หากคุณต้องแสดงข้อผิดพลาดที่แน่นอนที่boinccmd
รายงาน