2013-08-27 7 views
3

Я пытаюсь построить автоматизированный сценарий сборки с AppleScript на MacOS X.AppleScript «сделать сценарий оболочки» игнорирует PATH переменной

Пока все правильно работает с одним сбоем.

Команда «сделать скрипт (» zipalign -f -v 4 /tmp/src.apk /tmp/tgt.apk ") отлично работает, если я запустить его в отдельном рассказывают для приложения„Терминал“, но листья терминал окно открытым, когда это сделано. Все остальное в сценарии отлично работает в говорит для приложения «Finder».

при попытке выполнить команду с помощью «сделать скрипт» внутри сказать для I «Finder» только получайте ошибку "command not found".

Путь к zipalign установлен в /etc/paths и доступен через любое оконечное окно и «сделать оболочку», но не «Сделать сценарий оболочки» команда.

Что такое правильный способ гарантировать, что «сделать скрипт» использует $ PATH, чтобы найти команды, или же есть пуленепробиваемый способ закрыть терминал, оставленный «сделать сценарий»?

ответ

4

При вызове Баш как интерактивная оболочка, пути в /etc/paths и /etc/paths.d/* добавляются PATH по /usr/libexec/path_helper, которая запускается из /etc/profile. do shell script вызывает bash как sh и как неинтерактивную оболочку без входа, которая не читает /etc/profile.

Вы можете запустить path_helper вручную, хотя:

do shell script "eval `/usr/libexec/path_helper -s`; echo $PATH" 
+0

Пробовал и, похоже, ничего не менял. Ваша команда печатает текущую $ PATH, включая все записи из/etc/paths, но не конкатенирует мою команду и не запускает ее изнутри в новом скрипте do do. Errormessage остается тем же ... - Меня удивляет, что вручную запущенный/bin/sh из bash не имеет проблем в поиске $ PATH или команды -.- Какие-нибудь дополнительные предложения? – user30505

+0

Как вы его конкатенировали? У меня есть '/ usr/local/bin' в'/etc/paths', поэтому 'make shell script 'eval $ (/ usr/libexec/path_helper -s); wget -h" запускает '/ usr/local/bin/wget'. Если вы запустите 'sh' в обычном терминальном окне, он наследует переменные среды из текущей оболочки. – user495470

+0

Это сделало это ^^ Я не использовал круглые скобки вокруг параметра eval, спасибо alot :) – user30505

0

Хотя этот вопрос был четыре года назад, но я думаю, что самый простой ответ необходим, чтобы быть сказанным. Я использую команду «wkhtmltopdf» (который используется для печати PDF и помещается в /usr/local/bin), например

--past 
wkhtmltopdf out.html out.pdf 
--now 
PATH=$PATH:/usr/local/bin; wkhtmltopdf out.html out.pdf 

Это просто добавить новую переменную PATH в процессе ш называется вверх AppleScript.

Смежные вопросы