Как автоматизировать запуск сценария оболочки при открытии определенного приложения в OSX?

1582
VEDA0095

Недавно я столкнулся с проблемой, связанной с одним проектом, который пытался реализовать. Использую Automator, но я не знаю, как именно поступить в этом проекте. Это приложение для редактирования скриптов называется Brackets, и я хочу, чтобы при каждом его запуске выполнялась команда оболочки, известная как tty.js. Любая помощь, которую я могу получить, была бы отличной

0

2 ответа на вопрос

1
EkriirkE

Что вы можете попробовать, так это перейти в папку приложения .app и переименовать двоичный файл, создав файл сценария (помеченный как исполняемый файл) с именем исполняемого файла, который будет содержать ссылку на теперь переименованный исполняемый файл вместе со всеми сценариями. например

cd /Applications/Brackets.app/Contents/MacOS mv Brackets BracketsReal echo "tty.js" > Brackets echo "BracketsReal &" >> Brackets chmod +x Brackets 

Это должно создать текстовый скрипт, который запускает ваш скрипт и приложение потом ...

редактировать

Скрипты в Appname.app/Contents/MacOS/папке поддерживаются.

Первая строка #!/bin/sh(ака shebang) обязательна

Вызывается метод перемещения реального исполняемого файла и его выполнения из скрипта, wrappingкоторый также используется в таких приложениях, как Gimp или XQuartz (Xorg / X11) на MacOS.

Если я правильно понимаю, чего пытался достичь пользователь, запустите Bracket и автоматически откройте файл tty.js, кроме отсутствующего shebang, потребуется другое рассмотрение.

Чтобы правильно обернуть BracketsReal, скобки должны выглядеть примерно так:

#!/bin/sh exec "$(dirname "$0")/BracketsReal" 

Это должно работать так, как будто мы никогда не перемещали скобки в BracketsReal.

exec это встроенная команда оболочки

$0является специальным аргументом, передаваемым из системы в исполняемый сценарий оболочки; при выполнении щелчком должен быть указан полный путь к сценарию:

/Applications/Brackets.app/Contents/MacOS/Brackets

dirnameэто команда оболочки, чтобы получить только часть каталога без имени файла, $( )это подстановка команды, после выполнения строка становится:

exec /Applications/Brackets.app/Contents/MacOS/BracketsReal 

Настолько сильно, что мы можем переместить приложение из /Applicationsдругих папок и все равно должны его запустить.

На этом этапе мы должны проверить, что BracketsReal(возможно, сам скрипт) принимает файлы, которые открываются в качестве аргументов в командной строке (и, в конечном счете, если требуется какой-то особый синтаксис), если он принимает аргументы, тогда строка будет выглядеть примерно так:

exec "$(dirname "$0")/BracketsReal" "/path/to/the/file/tty.js" 

Последнее замечание: чтобы убедиться, что что-то не так со сценарием оболочки, просто откройте терминал и запустите оболочку, в командной строке терминала просто введите / paste:

/Applications/Brackets.app/Contents/MacOS/Brackets 

привилегии или синтаксические ошибки выводятся в окне терминала.

Спасибо! У меня была одна проблема, хотя. При запуске этих команд в терминале я продолжал получать сообщение «-bash:! / Bin / sh»: событие не найдено »после попытки выполнить« echo »#! / Bin / sh"> Скобки » VEDA0095 10 лет назад 0
Ага, хорошо, тогда пропустите эту строку. Отредактируйте файл в текстовом редакторе и удалите эту верхнюю строку. Ответ отредактирован. EkriirkE 10 лет назад 0
У меня есть еще одна проблема. Всякий раз, когда я набираю команду "mv", я также получаю это: "mv: переименовать скобки в BracketsReal: такого файла или каталога нет". Я понятия не имею, что делать на этом этапе. VEDA0095 10 лет назад 0
Я не был на OSX некоторое время, извините. Попробуйте сначала: `cd / Applications / Brackets.app / Contents / MacOS` EkriirkE 10 лет назад 0
Все хорошо. Спасибо за вашу помощь, хотя. К сожалению, я просто получаю это сообщение каждый раз, когда пытаюсь открыть приложение после изменений. «Вы не можете открыть приложение« Скобки », потому что оно не поддерживается на этом типе Mac». VEDA0095 10 лет назад 0
Grr. Чтобы вернуть его обратно, сделайте это: `cd /Applications/Brackets.app/Contents/MacOS; cp BracketsReal Brackets` EkriirkE 10 лет назад 0
Благодаря ответу @ EkriirkE я обнаружил, что скрипты поддерживаются, поэтому добавил немного информации, я все еще новичок в MacOS Alex 10 лет назад 1
0
user495470

Клавиатура Maestro имеет возможность запускать макрос при запуске приложения:

Вы также можете назначить ярлык для сценария, как, open -a Brackets;tty.jsа затем всегда использовать этот сценарий, чтобы открыть скобки.