Kiedy skończę z Terminalem, chcę go zamknąć. W tej chwili mam trzy opcje:
killall Terminal. Zakończy to proces, ale raczej nagle. Nie sądzę, żeby to był najlepszy pomysł.
Zadzwoń do wyjścia. Zmieniłem ustawienia, więc wyjście zamyka Terminal. Jednak aplikacja nadal wygląda na otwartą w Docku i nie robi tego, co chcę.
Kliknij prawym przyciskiem myszy> Zakończ. Jednak nie jest to polecenie terminala, aby go zamknąć.
Więc jak mam wyjść i zamknąć Terminal? Słyszałem coś o osascript, ale nie jestem pewien. Chcę wyjść i zamknąć, aby Terminal nie był już otwarty, zarówno jako okno, jak i jako proces.
kill
,killall
domyślnie wysyłanieSIGTERM
, które można złapać. Niektóre programy łapią to, czyszczą po sobie i bezpiecznie kończą pracę. Nie mam pojęcia, czyTerminal.app
jest wśród nich. Podejrzewam jednak, że byłoby lepiej w Ask Different lub Super User w szczypcach, ponieważ wydaje się, że nie ma żadnych treści programowych.Odpowiedzi:
w Terminal.app
Preferencje> Profile> (Wybierz profil)> Powłoka.
włączona opcja „Po zamknięciu powłoki” wybrana opcja „Zamknij okno”
źródło
A co ze starym dobrym Command-Q?
źródło
W aplikacji Terminal na karcie Preferencje >> Profile .
Wybierz kartę Shell po prawej stronie.
Możesz wybrać opcję Nigdy nie pytaj przed zamknięciem, aby wyłączyć ostrzeżenie.
źródło
When shell exits:
„zamknij okno”Właściwie powinieneś ustawić konfigurację na swoim terminalu, kiedy twój terminal jest włączony, naciśnij ⌘+, a zobaczysz poniższy ekran:
Następnie naciśnij zakładkę powłoki, a zobaczysz poniższy ekran:
Teraz wybierz
Close if the shell exited cleanly
dla Po wyjściu powłoki .Zgodnie z powyższą konfiguracją za każdym razem z
exit
poleceniem Terminal zostanie zamknięty, ale nie zostanie zamknięty.źródło
Możesz użyć AppleScript za pomocą
osascript
polecenia:źródło
.bashrc
(lub odpowiednik, jeśli używasz innej powłoki). Nadal myślę o odpowiedzi na 2.exit
po uruchomieniu procesu zdemonizowanego. Po tym, jak zdemonizowany proces odczekał sekundę, może wywołaćosascript
zgodnie z opisem.osascript
:tell application "System Events" to keystroke "a" using command down
. Prawdopodobnie będzie to jednak miało problem.W oknie terminala możesz wpisać:
Spowoduje to zabicie procesu aplikacji Terminala, który jest rodzicem nadrzędnym bieżącego procesu, co widać po poleceniu kill.
Aby zamknąć okno terminala z uruchomionego skryptu, musisz przejść o jeden poziom wyżej w hierarchii procesów, jak poniżej:
źródło
kill -9
chyba że wiesz, że inne sygnały nie będą działać.Używałem
ctrl + d
. Wyrzuca cię do miejsca docelowego, w którym uruchomiłeś polecenie sqlite3 w pierwszej kolejności.źródło
osascript -e "tell application \"System Events\" to keystroke \"w\" using command down"
To symuluje naciśnięcie klawisza CMD+ w.
Jeśli chcesz, aby Terminal całkowicie zakończył pracę, możesz użyć:
osascript -e "tell application \"System Events\" to keystroke \"q\" using command down"
Nie powoduje to żadnych błędów i sprawia, że terminal zatrzymuje się czysto.
źródło
Możesz także użyć tego zawiłego polecenia, które nie wyzwala ostrzeżenia o zakończeniu własnego procesu:
osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit
To polecenie jest dość długie, więc możesz zdefiniować alias (taki jak
quit
) w swoim profilu bash:alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'
Umożliwiłoby to po prostu wpisywanie
quit
w terminalu bez konieczności majstrowania przy innych ustawieniach.źródło
Użyj
osascript
polecenia w swoim kodzie, jak wspomniano w icktoofay:osascript -e 'tell application "Terminal" to quit'
Następnie otwórz preferencje terminala, przejdź do Ustawienia> Powłoka i ustaw „Pytaj przed zamknięciem” na „Nigdy”. Terminal powinien teraz całkowicie zamknąć się (nie pozostawać otwarty w doku) i zignorować monit przed zamknięciem. Jeśli masz otwarte tylko jedno okno terminala, a
osascript
polecenie jest ostatnim wierszem kodu, powinno poczekać na zakończenie polecenia, które uruchomiłeś wcześniej.Nie byłoby to idealne, jeśli uruchamiasz skrypty w tym samym oknie lub w innych oknach w tle (na przykład możesz uruchomić polecenie w tle i kontynuować używanie bieżącego okna dla innych poleceń, jeśli po pierwszym poleceniu występuje ampersand ); bądź ostrożny!
Jeśli zawiniesz
osascript
kod w pliku skryptu powłoki, prawdopodobnie możesz wywołać go dowolną zwięzłą nazwą pliku, którą mu nadasz --- o ile znajduje się w ścieżce wyszukiwania Terminala (uruchom,echo $PATH
aby zobaczyć, gdzie Terminal szuka skryptów).źródło
Utwórz skrypt:
cat ~/exit.scpt
lubię to:
command + w
zamknięcie karty)tell application "Terminal" set WindowNum to get window count if WindowNum = 1 then quit else tell application "System Events" to keystroke "w" using command down end if end tell
Następnie dodaj alias w swoim * shrc
tak jak
vi ~/.bashrc
lubzshrc
(cokolwiek innego?)dodaj to:
alias exit="osascript ~/exit.scpt"
I uruchom plik ~ / .bashrc lub ponownie otwórz terminal.app
źródło
Używałem
quit -n terminal
na końcu moich skryptów. Musisz ustawić terminal tak, aby nigdy nie wyświetlał monitów w preferencjach
Więc Terminal> Preferencje> Ustawienia> Powłoka Po zamknięciu powłoki Zamknij okno Pytaj przed zamknięciem Nigdy
źródło
Wypróbowałem tutaj kilka wariantów odpowiedzi. Bez względu na to, co próbuję, zawsze mogę znaleźć przypadek użycia, w którym użytkownik jest proszony o zamknięcie Terminala.
Ponieważ mój skrypt jest prosty (
drutil -drive 2 tray open
- aby otworzyć określony napęd DVD), użytkownik tego nie robi musi widzieć okna terminala podczas działania skryptu.Moim rozwiązaniem było przekształcenie skryptu w aplikację, która uruchamia skrypt bez wyświetlania okna terminala. Dodatkową korzyścią jest to, że wszystkie okna terminala, które są już otwarte, pozostają otwarte, a jeśli żadne nie są otwarte, Terminal nie pozostaje rezydentem po zakończeniu skryptu. Wydaje się, że w ogóle nie uruchamia się Terminala, aby uruchomić skrypt bash.
Postępowałem zgodnie z tymi instrukcjami, aby zmienić mój skrypt w aplikację: https://superuser.com/a/1354541/162011
źródło
Jeśli jest to komputer Mac, wpisz „zakończ”, a następnie naciśnij klawisz Return.
źródło