Як автоматично закрити Terminal.app при виході в OS X Lion?


3

Нещодавно я придбав новий Mac з OS X Lion, і налаштовую його для моїх потреб.

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

Будь-які пропозиції?

Відповіді:


8

Ця опція ніколи не закривала додаток Terminal.

Зауважте, що інші параметри мають назву Закрити вікно та Не закривати вікно ( акценти мій), чітко зрозумівши, що цей параметр стосується лише закриття вікна , а не всієї програми .


Ви можете визначити наступне для своєї оболонки, наприклад, ~/.bash_profileдля bash:

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

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

Можна, звичайно exit, дати йому інше ім’я, щоб відокремити від звичайного. Мені це подобається quit.


2
Використання AppleScript для виходу з терміналу - хороша ідея, але ви, мабуть, повинні змусити його виходити, лише якщо немає інших вікон, відкритих:osascript -e 'tell application "Terminal" to if not ((count windows) > 1) then quit'
Chris Page

@chris Можливо, справа смаку. Я дозволяю захисту виходу терміналу, коли запущені процеси справляються з цим.
Даніель Бек

Даніель Бек, моя думка полягає в тому, що якщо ви встановите його так, що коли б ви виходили з оболонки, вона запускається, ви не зможете закрити жодні термінали, якщо ви не захочете їх закрити і закрити термінал. Питання, яке задає Мторрес, полягає в тому, як змусити Термінал вийти, коли останнє вікно терміналу закрите; щоб зробити це, закрийте термінал лише тоді, коли відкрито лише одне вікно.
Кріс Пейдж

@Chris Можливо. Ми не знаємо, чи користувач насправді використовує декілька вікон терміналів. У зв'язку з цим ваш сценарій технічно неповний, оскільки він ігнорує, можливо, інші вкладки; і нічого не робить (навіть не закриваючи вкладку / вікно), коли є кілька вікон. Питання також не згадує вкладки. Без додаткових відгуків ми не можемо точно знати. Крім того, є причина, яку я пропоную надати функції інше ім’я, тому він фактично має вибір.
Даніель Бек

Привіт обом! Я зазвичай працюю з декількома вкладками, але мені не подобається закривати їх відразу. Мені подобається ваша маленька дискусія з цього приводу, і я залишаюсь із пропозицією Кріса. Так чи інакше, Даніель вказав право на рішення. Дякую!
mTorres

1

Щоб термінал закрився після закриття останнього терміналу / оболонки, ви можете змусити оболонку запустити 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, вони будуть заважати один одному. Рішення полягає в створенні іншої функції, яка дзвонить іншим і "захоплює_друге_функцію EXIT", щоб викликати все, коли оболонка виходить.

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


1

Як акуратне рішення, спробуйте

відкрити -a /Applications/Utilities/Terminal.app * .py АБО відкрити -b com.apple.terminal * .py

Для запущеної оболонки ви можете перейти до Налаштування> Оболонка> встановити її для виходу, якщо немає помилки.

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

Це воно.


0

Набагато простішим елегантним рішенням було б встановити псевдонім у вашому .bash_profile у цій команді:

alias quit="killall Terminal"

Красиво, е-е?


1
Це скасує, незалежно від того, що працює, усі ваші семінари на Терміналі. Програми, ймовірно, отримуватимуть sighupі припинятимуть посеред того, що роблять. Це працює лише в тому випадку, якщо ви релігійно використовуєте screenабо в tmuxіншому випадку, коли ви вперше введете його випадково, ви пошкодуєте про це.
Даніель Бек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.