Как закрыть Терминал в OSX из командной строки?
Почему "выход" не закрывает окно Terminal.app в Mac OS X?
$ exit
logout
[Process completed]
Есть ли способ закрыть окно, не используя мышь?
6 ответов
Окно, отображаемое Terminal.app, является лишь интерфейсом для процесса, который вы выбираете для запуска внутри него - в вашем случае, для оболочки Unix. Когда вы выходите из оболочки, Terminal.app не закрывает окно по умолчанию, поэтому у вас есть возможность проверить вывод любой команды, которую вы выполнили, после ее завершения.
Вы можете изменить свои настройки здесь
Настройки терминала -> Настройки -> Оболочка:
либо
- всегда закрывайте окно, каким бы ни был статус выхода оболочки
- закройте окно, если оболочка закрылась
- держать окно открытым (по умолчанию)
Кроме того, вы можете (почти) всегда закрывать окна в OSX с помощью Cmd-W, поэтому вам не нужна мышь, даже если она не закрывается автоматически.
Еще один совет: мне нравится нажимать Ctrl-D вместо ввода. Два ключа против пяти.
Command + Q -> закрывает приложение / процесс.
Command + W -> закрывает окно / экземпляр
На самом деле, для этого требования вы должны установить некоторые настройки для вашего терминала. следуйте инструкциям ниже, и вы закроете свой терминал только с exit
команда.
Когда терминал активен, нажмите ⌘ + , чтобы открыть окно настроек. тогда вы увидите ниже экран:
Затем нажмите вкладку оболочки, и вы увидите экран ниже:
Теперь выберите Close if the shell exited cleanly
Когда оболочка выходит.
Ваш терминал готов к выходу только с exit
команда.
Да, есть. Например, вы можете использовать AppleScript для достижения этой цели:
osascript -e 'tell application "Terminal" to close first window'
Первое окно всегда является текущим активным окном. Это тот, который вы хотите закрыть.
Перед закрытием окна Терминал может спросить вас, действительно ли вы хотите закрыть окно. Это зависит от ваших настроек. Возможно, вы решили "закрыть окно, только если оболочка завершена корректно или другие процессы не выполняются отдельно от…". (Это может быть настройка по умолчанию.) В этом случае добавление & exit
Команде закрывается окно сразу и без запроса.
osascript -e 'tell application "Terminal" to close first window' & exit
Я также предлагаю против предложения killall. Как предлагается изменить настройки в ваших предпочтениях, чтобы закрыть окно, если выход из оболочки был успешным. Если вы действительно ленивы (как и я), откройте свой профиль Bash и добавьте псевдоним. У меня есть мой набор, поэтому все, что мне нужно сделать, это набрать 'q'.
Мне нужен был вариант этого решения для приложения, которое требовало от пользователя ввода пароля в терминале для
sudo
сценарий. Безопасность Catalina делает отправку нажатий клавиш настоящей проблемой, поэтому, надеюсь, это решение поможет кому-то еще в будущем:
tell application "Terminal"
activate
do script "sudo say --rate=140 Intergalactic && kill -9 $$"
delay 5
repeat
try
do shell script "ps a | grep -v grep | grep 'sudo say --rate=140 Intergalactic'"
delay 0.5
on error
exit repeat
end try
end repeat
close front window
end tell
Вот объяснение некоторых странных вещей:
kill -9 $$
: Это в основномexit
это работает; по какой-то причинеexit
не работал у меня для моего приложения. Вы хотите убить процесс оболочки, чтобы пользователю не предлагалось завершить работу работающего терминала... Это позволит ему тихо закрыть.try...do shell script
: Это проверяет, выполняется ли команда, и если да, цикл продолжается, чтобы окно не было убито. Еслиgrep
находит совпадение, возвращает код ошибки 0 (AppleScript доволен); еслиgrep
не находит совпадения, он возвращает код ошибки 1, а затем ваш скрипт перестает работать, когда вечеринка почти начинается.close front window
: Да, я понимаю, что #closefrontwindow считается вредным. Существует промежуток в 500 мс, где либо другое окно терминала может попасть в фокус, либо пользователь может Command+Tab перейти в другое окно терминала или что-то в этом роде... Я полагаю, если вы взаимодействуете с окном, это, вероятно, крайний случай. Не стесняйтесь придумать лучший способ и дайте нам знать!
Я, вероятно, время от времени буду поддерживать эту вещь здесь: https://gist.github.com/andrewodri/e0440c52f7c0a7333c35ab6443581efe
Если вы хотите завершить само приложение из командной строки:
killall Terminal