Моя цель - включить в zip-файл ярлык, вместо того, чтобы указывать своим клиентам открыть терминал и запустить скрипт оболочки.
Мой развертываемый по сути выглядит так:
$ unzip Deliverable.zip
$ cd Deliverable; ls
app.jar run.sh
Скрипт в run.sh
:
#!/bin/sh
java -jar app.jar
В каталоге намного больше; Достаточно сказать, что мне нужно запустить скрипт из каталога Deliverable, поскольку мне нужно получить доступ к путям относительно него. Тем не менее, я не могу гарантировать, где клиент откроется Deliverable.zip
(может быть домашний каталог, может быть прямо в каталоге загрузок и т. Д.)
Я нашел это , что описывает , как создать новый рабочий процесс в Automator, а затем сохранить его в качестве приложения для запуска сценария оболочки. Я пытался сделать это, чтобы обернуть, run.sh
но он говорит, что не может найти run.sh
.
Кто-то предложил мне использовать applecript, а также прислал мне ссылку на то, как использовать applecript для переключения в текущий каталог; в automator есть «действие» appleScript; поэтому я создал новый рабочий процесс и сохранил его как приложение. Вот как это выглядит:
Код:
on run {input, parameters}
tell application "Finder"
set current_path to container of (path to me) as alias
end tell
do shell script "java -jar app.jar"
return input
end run
И это ошибка, которую я получаю при запуске:
Да ладно, это должно быть довольно просто. Что я здесь не так делаю?
источник
Ответы:
Переименуйте ваш файл .sh в .command, и вы можете перейти в каталог, в котором находится файл .command, в начале файла:
источник
Я вижу там несколько вещей не так.
Во-первых, вы открыли рабочий процесс, а не приложение.
Вы должны выбрать Приложение, когда вы делаете выбор для типа файла Automator.
И ваш код не будет работать так, как вы ожидаете, так как вы не изменили каталог. (компакт диск).
В том коде, который у вас есть, все, что он делает, это получает путь в качестве псевдонима и сохраняет его в переменной current_path и в формате, неподходящем для команд unix.
Но вы не используете это.
Таким образом, текущий каталог, скорее всего, будет вашей домашней папкой
На данном этапе не известно, что он пытается запустить.
Если я запустлю это, как у вас, я получу.
Что имеет смысл, так как у меня не установлена Java. Но если бы я это сделал, я бы не ожидал, что он найдет нужный файл.
Applescript должен выглядеть следующим образом.
В моем примере
Я перехожу к POSIX пути псевдонима в переменной current_path
то есть из "псевдонима" Macintosh HD: Приложения: "" в "/ Приложения /"
quoted form of
Сбегает путь , используя кавычки.В качестве демонстрации я использовал команду / bin / ls и направил ее к открытому в TextEdit stdin, чтобы вы могли проверить, попадаете ли вы в ожидаемую область.
Вы бы использовали что-то вроде;
Обновить:
Другой способ - просто использовать чистый Applescript.
источник
ls | open
код определенно открывает каталог, который я хочу, и это здорово. Но когда я вызываю openClient.app
, я получаю:LSOpenURLsWithRole() failed with error -10665 for the file <path-to-Client.app>
- несколько поисков того, что означает эта ошибка, предложили проблему с разрешением, я проверил и+x
флаги установлены. Я также попробовал это , и это не сработало (с той же ошибкой).Client.app
из Finder (двойной щелчок) также приводит к тому же всплывающему сообщению об ошибке PowerPC.I call open Client.app
Это приложение Automator. Из того, что я понимаю в Automator у вас есть AppleScript кодdo shell script "cd " & quoted form of (POSIX path of current_path) & " ;\"java -jar app.jar\""
. Так где вы используетеopen
команду? который, насколько я понимаю, что вы делаете, вам не нужно это использовать. Клиенты будут использовать двойной щелчок на приложении, и приложение будет запускать java$ open Client.app
и двойным щелчком мыши. Ваша версия с вызовомls | open -fe
работает, но когда я изменяю ее,java -jar app.jar
она дает мне эту ошибку.do shell script "cd " & quoted form of (POSIX path of current_path) & " ; " & quoted form of "java -jar app.jar"
Путь к сценарию
В вашем AppleScript вам нужно изменить текущий рабочий каталог (cwd) перед выполнением команды java. Сделайте это с помощью строки AppleScript, например:
Это
&&
важно. Если этоcd
удастся,java
команда будет запущена в правом cwd . Если произойдетcd
сбой,java
команда не будет запущена.Проблемы, с которыми вы, вероятно, столкнетесь, включают:
cd
; пользователи будут иметь странно названные папки и пробелы в своих путях.cd
может потерпеть неудачу; оберните ваш AppleScript в блок try, чтобы поймать некоторые ошибки и предупредить пользователя.Perl
Лично я бы использовал короткий Perl-скрипт вместо bash-скрипта.
Есть гораздо лучшие способы написать этот фрагмент Perl, но это должно сработать.
Приложение Automator
Наилучшим подходом является проработка проблем с вашим подходом Automator. В ответе @ markhunte обсуждается, как исправить путь и создать приложение . Это должно получить вас большую часть пути.
Также см. Путь AppleScript относительно расположения скрипта .
appify - создайте самое простое приложение для Mac из сценария оболочки
Кроме того, вы можете использовать скрипт appify Томаса Айлотта, чтобы связать ваш сценарий оболочки в приложение OS X. В статье Матиаса Бинена рассказывается, как использовать сценарий, как создавать простые приложения для Mac из сценариев оболочки .
Внесенные сообществом улучшения для этого скрипта доступны:
Подписание кода
После того, как вы создали свой пакет приложений, он должен быть подписан кодом. Запустится приложение с подписью кода, не требующее от клиентов отключения Gatekeeper.
Подпишите код вашего приложения, используя Apple Developer ID и
codesign
команду:Узнайте больше о подписи кода на сайте Apple Developer.
источник
Используйте Platypus : «Platypus - это инструмент разработчика OS X, который создает собственные приложения Mac из интерпретированных сценариев ...»
источник
Вы можете изменить ,
run.sh
чтобыrun.command
и получить пользователь двойного щелчка?источник
cd ~
), что привело к сбою.Вот мое понимание того, что, как я понял, вы пытаетесь достичь. Код долго наматывается специально.
Все, что вам нужно сделать, это скопировать код в редактор Applescript, внести любые необходимые изменения и сохранить его как приложение.
Что касается диалога о том, что приложение PowerPC не поддерживается, я не знаю. Можете ли вы запустить его из командной строки? Я бы проверил это, чтобы подтвердить, что приложение работает в первую очередь.
источник