Запуск сценария оболочки в OS X без появления окна терминала?

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

временное решение я нашел, чтобы обернуть скрипт в .App directory, которая решает проблему избыточного окна терминала, но имеет некоторые другие проблемы (например, OS X, похоже, рассматривает каждое результирующее окно iTerm как отдельное приложение, загромождая мою док-станцию). (EDIT: это поведение было вызвано ошибкой в моем скрипте, см. ниже)

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

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

7
задан toupeira
23.03.2023 10:56 Количество просмотров материала 3304
Распечатать страницу

7 ответов

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

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

17
отвечен cregox 2023-03-24 18:44

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

enter image description here

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

enter image description here

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

3
отвечен slhck 2023-03-24 21:01

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

3
отвечен svth 2023-03-24 23:18

вот быстрый и грязный пример почти без усилий (для приложения "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!), введите два control-D, которые закроются

    файл без признака конца строки и возвратит вас к приглашению оболочки.)

  5. дважды щелкните новое "app" из finder. Он будет работать без окна.

1
отвечен JeffB 2023-03-25 01:35

если добавить ключ LSUIElement и установите 1 in 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
отвечен tig 2023-03-25 03:52

вот небольшой обходной путь:

компиляция applescript, который вызывает скрипт оболочки:)

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

osacompile составит 'do shell script "XXX"' фрагмент кода applescript. Ваш скрипт оболочки XXX.

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

но это можно побежать от BetterTouchTool без любого юродства.

0
отвечен kenny 2023-03-25 06:09

существует другая возможная тренировка. Безопасный ваш скрипт в процесса Automator. Вызовите рабочий процесс с помощью launchd. Код:

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

это не запустит какую-либо программу, ни показать в строке меню и его путь более тихий, то приложение утконоса.

еще лучший способ выполнения скриптов оболочки-непосредственно в launchd.

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

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

0
отвечен Atalantia 2023-03-25 08:26

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх