Как запустить скрипт .command из приложения mac automator - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь создать «приложение» для mac, используя automator, который в основном вызывает файл .command для выполнения всей работы. Командный файл будет в том же каталоге, что и .app, но я падаю на первый, который - получить текущий каталог .app-файла, по которому щелкнули, чтобы определить местоположение файла .command-файла.

я пробовал

SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
echo "-- $SCRIPTPATH"

Это просто возвращает моего пользователя директору - в основном ~ Само приложение находится в директории на примере Desktop: ~ / Desktop / foo / my.app

Я также пытался

 here="`dirname \"$0\"`"
   echo "cd-ing to $here"
   cd "$here" || exit 1

ни работать.

в конечном счете мне нужно вызвать my.command, чтобы запустить команду, но мне нужно знать ее фактическое положение - или даже относительно приложения, чтобы оно запускалось. в настоящее время я получаю сообщение об ошибке, что он не может найти my.command, поскольку он не находится в корне моей учетной записи пользователя (поскольку я не могу контролировать, где он может быть размещен на компьютере конечного пользователя).

Любые указатели на то, что я могу сделать, чтобы решить это очень ценится.

Примечание: Чтобы ответить - почему я использую приложение, в котором есть скрипт терминала, для вызова .command, который по сути является скриптом, - в основном потому, что если вы делаете это таким образом, терминал на самом деле не появляется. что для этого демо-это то, что мне нужно случиться.

1 Ответ

0 голосов
/ 07 ноября 2019

Поскольку вы не указали подробные сведения о вашем Automator рабочем процессе , сохраненном как приложение , я представляю следующее в качестве примера того, какиметь и приложение Automator , например, my.app , выполнить, например, my.command файл сценария , который находится в том же папка , например, my.app is.

Для целей примера я создал папку с именем foo на моем рабочем столе , в котором my.app был сохранен вместе с my.command файлом сценария .

Automator рабочий процесс приложения использует Запуск AppleScript действие для достижения цели.

Замена по умолчанию код со следующим примером AppleScript код :

set myCommandFilename to "my.command"

set myAppPathAlias to path to me

tell application "System Events"
    set myDirName to POSIX path of container of myAppPathAlias
    set myCommandFilePathname to myDirName & "/" & myCommandFilename
    set myCommandFilenameExists to exists file myCommandFilePathname
end tell

if myCommandFilenameExists then
    try
        do shell script myCommandFilePathname's quoted form
    on error eStr number eNum
        display dialog eStr & " number " & eNum ¬
            buttons {"OK"} default button 1 ¬
            with title "File I/O Error..." with icon stop
    end try
else
    display dialog "A necessary file, ' " & myCommandFilePathname & ¬
        "', is missing!" buttons {"OK"} default button 1 ¬
        with title "Missing File..." with icon stop
end if
  • Примечание: Измените my.command на действительное имя файла . Оставшуюся часть примера AppleScript код изменять не нужно.

Automator App

Если запущен my.app и файл сценария my.command не находится в той же папке , что и my.app , затем отобразится сообщение об ошибке, например:

Missing File Error

Если my.app запускается и my.command файл сценария не имеет установленного исполняемого бита , тогда будет отображаться это сообщение об ошибке, например:

File  I/O Error

Кроме того, если файл сценария my.command не завершается корректно, он также будет отображать ошибкусообщение, например:

Dirty Exit

  • Содержание сообщения об ошибке будет зависеть от содержимого, например, my.command файл сценария , как он закодирован и как он терпит неудачу. Этот пример является наихудшим сценарием в том смысле, что он позволяет узнать, что произошел сбой, но не произошел сбой.

Примечание. пример AppleScript код только и не содержит никакой дополнительной обработки error , которая может быть подходящей. Пользователь должен добавить любую обработку ошибок , которая может быть уместной, необходимой или желаемой. Взгляните на оператор try и error оператор в Руководство по языку AppleScript . См. Также, Работа с ошибками .

...