18

Я пытаюсь настроить несколько сочетаний клавиш, которые открывают определенные сеансы iTerm, что я смог сделать с помощью BetterTouchTool и немного магии AppleScript. Проблема в том, что OS X настаивает на том, чтобы открыть окно терминала для любого сценария оболочки, который вы выполняете через графический интерфейс (например, из Finder или как сочетание клавиш из BetterTouchTool). Окно терминала не появляется, если я запускаю скрипт напрямую с другого терминала.

Обходной путь, который я нашел, заключался в том, чтобы обернуть скрипт в каталог .app, который решает проблему лишнего окна терминала, но имеет некоторые другие проблемы (например, OS X, кажется, обрабатывает каждое получающееся окно iTerm как отдельное приложение, загромождая мою док-станцию ). (РЕДАКТИРОВАТЬ: это поведение на самом деле было вызвано ошибкой в моем скрипте, см. Ниже)

Я также попытался назначить приложение «Терминал» другому виртуальному рабочему столу в настройках «Пространства», чтобы убрать его из поля зрения, но затем оно просто переключится на этот рабочий стол, прежде чем запускать сценарий.

Есть ли способ полностью отключить это поведение? Я уже нашел настройку в настройках терминала, чтобы закрыть окно после завершения скрипта, но все еще раздражает, что окно терминала всплывает на секунду.

7 ответов7

17

Откройте Automator, выберите « Приложение», добавьте действие « Выполнить сценарий оболочки» и вставьте команду «Shell» между кавычками (если у вас есть файл, вы можете просто перетащить его).

Помимо воспроизведения, теперь вы можете сохранить его (как приложение в любом месте) и даже установить значок.

3

Вот небольшой обходной путь, на случай, если вы захотите запускать такие приложения, как Альфред. Я использую его каждый день, и я купил Powerpack, который позволяет запускать сценарии без вывода сообщений .

Они не откроют терминал при запуске и могут быть связаны с любой последовательностью ключевых слов. Они могут даже включать параметры и иметь дополнительные параметры:

Я использую это для некоторых маленьких фрагментов, и это очень гибко.

3

Возможно, вы захотите проверить Platypus, который создает приложения Mac OS X из сценариев оболочки и других интерпретируемых сценариев.

2

Вот быстрый и грязный пример, почти без усилий (для приложения с именем "myapp"):

  1. Составьте частичную иерархию приложений:

        mkdir -p ./myapp.app/Contents/MacOS
    
  2. Убедитесь, что в первой строке вашего скрипта указан полный путь к нужной программе, например,

    #!/bin/bash
    
  3. Назовите свой сценарий оболочки "myapp" (без кавычек, без расширения), дайте ему разрешение на выполнение, а затем поместите его в подкаталог MacOS. Чтобы дать ему разрешение на выполнение:

    chmod ugo+x myapp
    
  4. Перейдите в подкаталог Contents и создайте файл PkgInfo, содержащий строку: APPL???? [без конца строки в конце строки!] Используйте утилиту cat (1) для создания файла:

    cat > PkgInfo
    APPL????
    

    После того, как вы набрали строку (не нажимайте return!), Введите два управляющих D, которые закроют
    файл без разделителя строк и вернет вас в командную строку.)

  5. Дважды щелкните ваше новое "приложение" из поиска. Он будет работать без окна.

0

Если вы добавите ключ LSUIElement и установите его в 1 в Info.plist вашего приложения, он не создаст значок в Dock.

Вот Info.plist моего небольшого скриптового приложения:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleExecutable</key>
    <string>launch</string>
    <key>CFBundleIconFile</key>
    <string>launch</string>
    <key>LSUIElement</key>
    <string>1</string>
</dict>
</plist>
0

Есть другая возможная тренировка. Сохраните ваш сценарий оболочки в рабочем процессе автоматизатора. Запустите рабочий процесс с помощью launchd. Код является:

/usr/bin/automator /path/to/the/file.workflow

Это не запустит ни одну программу и не будет отображаться в строке меню и будет более тихим, чем приложение Platypus.

Еще лучший способ выполнения сценариев оболочки - это прямой запуск.

/bin/bash /path/to/shellScript.command

выполнит команду ультра тихо в фоновом режиме.

0

Вот немного обходного пути:

Скомпилируйте appleScript, который вызывает скрипт оболочки :)

osacompile -e 'do shell script "cd ~; echo aaa > temp.txt"' -o ~/name_of_script.scpt

Программа osacompile скомпилирует фрагмент кода appleScript 'do shell script "XXX"' . Ваш сценарий оболочки XXX.

Остерегайтесь цитирования, сценарий оболочки должен быть заключен в кавычки, чтобы обойти оболочку, которую вы используете для ее компиляции, без изменений.

Но это может быть запущено из BetterTouchTool без каких-либо причуд.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .