У мене є запущений скрипт, де команда, яку я намагаюся запустити, помиляється (мабуть, це не слово, це зараз), скаржиться на неправильне використання.
Конкретна помилка, яку я отримую, - це текст використання команди, скинутий у системний журнал. З цього я випливаю іншу інформацію (шлях до команди, синхронізацію і т. Д.) В плісті аналізується правильно, тільки не параметри команди.
Після використання команди у мене є останній рядок:
18/11/2013 09:30:00.101 com.apple.launchd.peruser.501: (fake.lable.seti[33833]) Exited with code: 1
Але це просто означає "я вийшов з помилкою".
Я знаю, що запускає розділяє команду від її параметрів, і на сторінці man розповідає про ProgramArguments: "... Зауважте: багато людей плутають цей ключ. Будь ласка, прочитайте execvp (3) дуже уважно! .."
Ну я читаю execvp (3), і я не мудріший, тому я прошу вас прекрасно.
Зазвичай, запускаючи команду з терміналу, вона виглядатиме так:
/Library/Application\ Support/BOINC\ Data/boinccmd --host localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update
Це працює частування.
Ось як я розділив це в розділі Програми / Програми Аргументів мого списку LaunchAgent:
<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 \ escape, але це не працює, запускаючи втечу пробілів у шляху для вас)
Я намагався розділити аргументи далі:
<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>
Але це теж не здавалося.
Як завжди, я впевнений, що мені не вистачає чогось такого простого.
Спасибі.
ВІДПОВІДЬ:
Першим рядком програмних аргументів повинен бути шлях до програми. Це те, що мене спонукало, і справді те, що, мабуть, означало коментар "... Будь ласка, читайте дуже уважно! .." :) Я також виявив, що мені довелося розділити аргументи на їх складові частини. Коли я мав все це на місці, то ця річ приваблива. Велике спасибі.
<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>
Останню редакцію, щоб сказати, щоб зрозуміти пояснення щодо того, ЧОМУ це має бути, дивіться в поясненні СерПавлова.
~ Ш
<string>--host localhost</string>
точно не вийде . Пам'ятайте, що коли ви пишете командний рядок в оболонку, він не має уявлення про те, що є частиною параметра і що є звичайним аргументом - він просто розбивається на пробіли, перш ніж передавати аргументи запущеній програмі. Також це може допомогти, якщо ви мали б показати точну помилку, про яку boinccmd
повідомляється.