Я пытаюсь настроить несколько сочетаний клавиш, которые открывают определенные сеансы iTerm, что я смог сделать с помощью BetterTouchTool и немного магии AppleScript. Проблема в том, что OS X настаивает на том, чтобы открыть окно терминала для любого сценария оболочки, который вы выполняете через графический интерфейс (например, из Finder или как сочетание клавиш из BetterTouchTool). Окно терминала не появляется, если я запускаю скрипт напрямую с другого терминала.
Обходной путь, который я нашел, заключался в том, чтобы обернуть сценарий в каталог .app, что решает проблему лишнего окна терминала, но имеет некоторые другие проблемы (например, OS X, кажется, обрабатывает каждое получающееся окно iTerm как отдельное приложение, загромождая мою док-станцию ). (РЕДАКТИРОВАТЬ: это поведение на самом деле было вызвано ошибкой в моем скрипте, см. Ниже)
Я также попытался назначить приложение «Терминал» другому виртуальному рабочему столу в настройках «Пространства», чтобы убрать его из поля зрения, но затем оно сначала переключится на этот рабочий стол, прежде чем запускать сценарий.
Есть ли способ полностью отключить это поведение? Я уже нашел параметр в настройках терминала, чтобы закрыть окно после завершения сценария, но все еще раздражает, что окно терминала всплывает на секунду.
источник
Ответы:
Откройте Automator , выберите « Приложение» , добавьте действие « Выполнить сценарий оболочки» и введите команду «Shell» между кавычками (если у вас есть файл, вы можете просто перетащить его).
Помимо воспроизведения, теперь вы можете сохранить его (как приложение в любом месте) и даже установить значок .
источник
&
а затем вызвать AppleScript, чтобы вывести приложение (в моем случаеmplayer
) на переднийmplayer myvideo.avi &; osascript -e 'tell application "System Events" to set frontmost of the first process whose displayed name is "mplayer" to true'
mplayer
для воспроизведения видео из слайд-шоу (в Skim). Существует ошибка, из-за которой проигрыватель остается в фоновом режиме, если Skim установлен в полноэкранный режим, хотя я не уверен, относится ли этот дефект только к Skim или ко всем полноэкранным приложениям, поэтому я решил опубликовать свое решение здесь.Вот быстрый и грязный пример, почти без усилий (для приложения с именем "myapp"):
Составьте частичную иерархию приложений:
Убедитесь, что в первой строке вашего скрипта указан полный путь к нужной программе, например,
Назовите свой сценарий оболочки «myapp» (без кавычек, без расширения), дайте ему разрешение на выполнение, а затем поместите его в подкаталог MacOS. Чтобы дать ему разрешение на выполнение:
Перейдите в подкаталог Contents и создайте файл PkgInfo, содержащий строку: APPL ???? [без конца строки в конце строки!] Используйте утилиту cat (1) для создания файла:
После того, как вы ввели строку (не нажимайте return!), Введите два управляющих D, которые закроют
файл без разделителя строк и вернут вас к приглашению оболочки.)
Дважды щелкните ваше новое «приложение» из поиска. Он будет работать без окна.
источник
Возможно, вы захотите проверить Platypus , который создает приложения Mac OS X из сценариев оболочки и других интерпретируемых сценариев.
источник
Вот небольшой обходной путь, на случай, если вы захотите запускать такие приложения, как Альфред . Я использую его каждый день, и я купил Powerpack , который позволяет запускать сценарии без вывода сообщений .
Они не будут открывать терминал при запуске и могут быть связаны с любой последовательностью ключевых слов. Они могут даже включать параметры и иметь дополнительные параметры:
Я использую это для некоторых маленьких фрагментов, и это очень гибко.
источник
Если вы добавите ключ
LSUIElement
и установите его1
вInfo.plist
своем приложении, он не создаст значок в Dock.Вот
Info.plist
мое небольшое приложение-скрипт:источник
touch
использовать пакет, чтобы убедиться, что использовалась новейшая версия. Но в любом случае мне не очень нравится групповой подход, потому что кажется, что он всегда будет создавать отдельные экземпляры приложенияdo shell script "say 'arsti'"
, это не откроет окно терминала.pgrep
, а затем передает соответствующий код непосредственноosascript
(интерпретатор AppleScript). Проблема в том, чтоpgrep
пришла от Homebrew, а не по умолчанию$PATH
. Поэтому мой скрипт всегда запускал новый экземпляр iTerm, даже если он уже работал. После добавления полного пути кpgrep
сценарию пакетный подход, в конце концов, работает нормально, так что я думаю, что сейчас я счастлив ;-)CFBundleExecutable
и иCFBundleIconFile
), я получил это, чтобы работать отлично.Вот немного обходного пути:
Скомпилируйте appleScript, который вызывает скрипт оболочки :)
osacompile
Будет компилировать'do shell script "XXX"'
AppleScript фрагмент кода. Ваш сценарий оболочки XXX.Остерегайтесь цитирования, сценарий оболочки должен быть заключен в кавычки, чтобы обойти оболочку, которую вы используете для ее компиляции, без изменений.
Но это может быть запущено из BetterTouchTool без каких-либо причуд.
источник
Есть другая возможная тренировка. Сохраните ваш сценарий оболочки в рабочем процессе автоматизатора. Запустите рабочий процесс с помощью launchd. Код:
Это не запустит ни одну программу и не будет отображаться в строке меню и будет более тихим, чем приложение Platypus.
Еще лучший способ выполнения сценариев оболочки - это прямой запуск.
выполнит команду ультра тихо в фоновом режиме.
источник