Закрыть окно терминала из оболочки script (Unix)?

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

Ответ 1

Использование exit 0 приведет к чистому завершению script.

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

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

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

Ответ 2

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

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

Затем в конце script используйте:

osascript -e 'сообщить программе "Terminal" для закрытия (каждое окно, имя которого содержит "Имя моего окна" )' &

Ответ 3

Вы можете использовать apple script для выйти terminal app. Добавьте в свой script -

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

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

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

killall Terminal

Примечание:

Как примечание, вы можете свободно добавлять приведенные выше команды к вашему script, и он будет работать так, как вы хотите. Однако есть несколько предостережений. Первый, вы ограничите возможность работы script в разных блоках. Во-вторых,, было бы безопаснее использовать nohup, чтобы все команды, которые в данный момент выполнялись, не выходили из-за выхода из terminal app.

Ответ 4

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

#!/bin/sh

{your script here}

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

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

Ответ 5

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_
}

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

Ответ 6

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

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

  • Запустить Automator (в приложениях).
  • Выберите "Новый документ" и спрашивает "Выберите тип документа", выберите "Приложение"
  • В левой панели, выберите "Утилиты", затем "Запустить оболочку Script".
  • Введите свой script в элементе рабочего процесса на правой панели. Вы можете либо позвонить другому shell script, или просто поместите свои команды в свои собственные.
  • Сохранить Приложение, которое станет полнофункциональным Mac App. Вы даже можете вырезать и вставлять значки из других приложений, чтобы дать вам script некоторые личность.