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