Как автоматически закрыть Terminal.app при выходе из OS X Lion?

Как автоматически закрыть Terminal.app при выходе из OS X Lion?

Недавно я приобрел новый Mac с OS X Lion и настраиваю его под свои нужды.

Я пытался настроить автозакрытие в Терминале, используя его настройки (как я делал с Tiger и Snow Leopard), но это не работает. Я установил «Закрыть, если оболочка завершилась чисто», но когда я набираю exit, окно закрывается, но Terminal.app все еще открыт. Его меню видно, и с помощью alt+ tabя могу увидеть, что он запущен.

Какие-либо предложения?

решение1

Эта опция никогда не закрывала приложение Терминал.

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


Вы можете определить следующее для своей оболочки, например, в ~/.bash_profilefor bash:

function exit {
    osascript -e 'tell application "Terminal" to quit' 
}

Затем добавьте osascriptв список приложений, которые не требуют подтверждения перед выходом (в Preferences > Settings > Shell). Введите exitдля выхода из Terminal, если нет других вкладок с запущенными блокирующими программами.

exitКонечно, можно дать ему другое имя, чтобы отделить от обычного . Мне нравится quitза это.

решение2

Чтобы Терминал завершал работу после закрытия последнего терминала/оболочки, можно заставить оболочку запустить AppleScript при выходе:

# Quit Terminal when this shell exists if there are no other terminals open.                                                                                                                    
if [ "$TERM_PROGRAM" == "Apple_Terminal" ]; then
    quit_terminal_when_no_terminals_remain() {
        osascript -e 'tell application "Terminal" to if running and (count every tab of every window whose tty is not "'"$(tty)"'") is 0 then quit'
    }
    trap quit_terminal_when_no_terminals_remain EXIT
fi

Тест для Apple_Terminal гарантирует, что этот код вступит в силу только при запуске внутри Терминала.

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

  1. Сначала он проверяет, запущен ли еще Терминал. Если нет, то ничего не делает.
  2. Он завершает работу только в том случае, если нет открытых терминалов или открыт только один для текущего tty. Он проверяет, есть ли какие-либо вкладки, кроме той, что для устройства tty, к которому подключена текущая оболочка "$(tty)".

Обратите внимание, что если вы вызываете любой другой код оболочки, который перехватывает EXIT, они будут мешать друг другу. Решение состоит в том, чтобы создать другую функцию, которая вызывает другие и "перехватывает the_other_function EXIT", чтобы вызвать все, когда оболочка выходит.

Кстати, как всегда, если эта функциональность важна для вас, пожалуйста, отправьте запрос на улучшение в Apple. Попросите настроить приоритет так, чтобы Терминал закрывался, когда больше нет открытых окон:https://bugreport.apple.com/

решение3

В качестве изящного решения попробуйте-

откройте -a /Applications/Utilities/Terminal.app *.py ИЛИ откройте -b com.apple.terminal *.py

Для запущенной оболочки вы можете перейти в «Настройки» > «Оболочка» > установить выход при отсутствии ошибок.

Я часто этим пользуюсь, когда мне нужно почти одновременно запустить много скриптов/команд.

Вот и все.

решение4

Гораздо более простым и элегантным решением было бы задать псевдоним в вашем .bash_profile с помощью следующей команды:

alias quit="killall Terminal"

Красиво, да?

Связанный контент