Закрыть окно терминала из сценария оболочки (Unix)? - PullRequest
51 голосов
/ 10 января 2012

Есть ли способ закрыть окно терминала из скрипта оболочки? У меня есть файл .command, который должен просто убраться с дороги, как только это будет сделано.

Ответы [ 6 ]

57 голосов
/ 11 января 2012

Использование exit 0 полностью завершит работу сценария.

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

Terminal.app > Preferences > Profiles > Shell
    - "When the shell exists:"
        > Close if the shell exited cleanly
    - "Ask before closing:"
        (•) Never
        -- OR --
        (•) Only if there are....

Когда используется «Закрыть при чистом выходе из оболочки», сценарий закроет окно, если результат выхода равен 0, что по умолчанию, если ничего не пошло не так.

20 голосов
/ 15 января 2015

Поскольку вы не хотите удалять все окна терминала, сначала измените имя вашего окна с «Терминал» на другое:

echo -n -e "\ 033] 0;Имя моего окна \ 007 "

Затем в конце сценария введите:

osascript -e 'сказать приложению" Терминал "закрыть (каждое окно, чье имясодержит «Имя моего окна») '&

16 голосов
/ 10 января 2012

Вы можете использовать от apple script до выход terminal app. Добавьте следующее в ваш скрипт -

osascript -e 'tell application "Terminal" to quit'

Это даст вам всплывающее окно, подтверждающее закрытие приложения. Вы можете отключить это в настройках терминала.

Кроме того, вы также можете использовать команду killall для выхода из приложения. Следующее будет работать так же хорошо.

killall Terminal

Примечание:

Так же, как примечание, вы можете свободно добавлять вышеуказанные команды в ваш скрипт, и он будет работать так, как вы хотите. Однако есть несколько предостережений. Сначала , поскольку вы будете ограничивать способность вашего скрипта работать на разных полях. Во-вторых, , было бы безопаснее использовать nohup, чтобы все выполняющиеся в данный момент команды не выходили из-за выхода из Terminal app.

9 голосов
/ 25 сентября 2014

Это работает для меня:

#!/bin/sh

{your script here}

osascript -e 'tell application "Terminal" to close (every window whose name contains ".command")' &
exit

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

7 голосов
/ 14 января 2014
closeWindow() {
    /usr/bin/osascript << _OSACLOSE_
    tell application "Terminal"
        close (every window whose name contains "YourScriptName")
    end tell
    delay 0.3
    tell application "System Events" to click UI element "Close" of sheet 1 of window 1 of application process "Terminal"
_OSACLOSE_
}

Это закроет окно терминала для вашего скрипта и оставит открытыми любые другие окна терминала, если их заголовки не совпадают.Чтобы он работал, Терминал должен быть добавлен в список приложений, которым разрешено использовать Accessibility framework.Вы также можете переключаться между окнами терминала с помощью команды повтора и закрывать каждое окно x, содержащее элемент пользовательского интерфейса «Закрыть» на листе 1.

5 голосов
/ 12 августа 2015

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

Вот как вы это делаете:

  1. Запустить Automator (в приложениях).
  2. Выберите «Новый документ» и когда это просит «Выберите тип документа», выберите «Приложение»
  3. В На левой панели выберите «Утилиты», затем «Запуск сценария оболочки».
  4. Введите свой Команды сценария в элементе рабочего процесса на правой панели. Вы можете позвонить другому или просто поместите ваши команды непосредственно в них.
  5. Сохранить Приложение, которое станет полноценным Mac App. Вы можете даже вырезать и вставлять иконки из других приложений, чтобы дать вашему сценарию личность.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...