3

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

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

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

4 ответа4

8

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

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


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

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

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

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

1

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

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

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

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

Вот и все.

0

Чтобы завершить работу терминала после закрытия последнего терминала / оболочки, при выходе из нее можно запустить 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, они будут мешать друг другу. Решение состоит в том, чтобы создать другую функцию, которая вызывает другие и "trap the_other_function EXIT", чтобы вызывать все при выходе из оболочки.

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

0

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

alias quit="killall Terminal"

Красиво, а?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .