Недавно я приобрел новый Mac с OS X Lion и настраиваю его под свои нужды.
Я пытался настроить автозакрытие в Терминале, используя его настройки (как я делал с Tiger и Snow Leopard), но это не работает. Я установил «Закрыть, если оболочка завершилась чисто», но когда я набираю exit
, окно закрывается, но Terminal.app все еще открыт. Его меню видно, и с помощью alt+ tabя могу увидеть, что он запущен.
Какие-либо предложения?
решение1
Эта опция никогда не закрывала приложение Терминал.
Обратите внимание, что другие варианты озаглавленыЗакройокноиНе закрывайтеокно(акцентмой), давая понять, что эта настройка относится только к закрытиюокно, не весьприложение.
Вы можете определить следующее для своей оболочки, например, в ~/.bash_profile
for 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 гарантирует, что этот код вступит в силу только при запуске внутри Терминала.
Поскольку он выполняется асинхронно, скрипт может запуститься до или после закрытия терминала, содержащего его (хотя обычно он запускается после этого), и если этот терминал закрыт из-за того, что пользователь вышел из терминала, терминал может уже не работать во время запуска скрипта, поэтому:
- Сначала он проверяет, запущен ли еще Терминал. Если нет, то ничего не делает.
- Он завершает работу только в том случае, если нет открытых терминалов или открыт только один для текущего 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"
Красиво, да?