Щоб термінал закрився після закриття останнього терміналу / оболонки, ви можете змусити оболонку запустити 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, вони будуть заважати один одному. Рішення полягає в створенні іншої функції, яка дзвонить іншим і "захоплює_друге_функцію EXIT", щоб викликати все, коли оболонка виходить.
До речі, як завжди, якщо ця функціональність важлива для вас, будь ласка, подайте запит на покращення в Apple. Попросіть налаштування налаштування, щоб змусити термінал вийти, коли більше немає вікон відкритих: https://bugreport.apple.com/
osascript -e 'tell application "Terminal" to if not ((count windows) > 1) then quit'