OSX - "Çıkış" komutu yerine getirildikten sonra Terminal penceresi otomatik olarak nasıl kapatılır.


104

Terminal ile işim bittiğinde, ondan çıkmak istiyorum. Şu anda üç seçeneğim var:

  1. killall Terminali. Süreci sona erdirecek, ama daha ziyade aniden. Bunun en iyi fikir olduğunu sanmıyorum.

  2. Çağrı çıkışı. Ayarları değiştirdim, bu yüzden çıkış Terminali kapattı. Uygulama yine de Dock'ta açık görünüyor ve benim yapmasını istediğim şeyi yapmıyor.

  3. Sağ tıklayın> Çık. Ancak, bu çıkış için bir Terminal komutu değildir.

Peki şimdi, Terminal'den çıkıp kapatmam gereken yol nedir? Osascript hakkında bir şeyler duydum ama çok emin değilim. Çıkmak ve kapatmak istiyorum, böylece Terminal artık hem pencere hem de işlem olarak açık kalmasın.


Gibi kill, yakalanabilen killallgönderme varsayılanları gibi SIGTERM. Bazı programlar onu yakalar, arkalarını temizler ve zarif bir şekilde çıkar. Terminal.appAralarında olup olmadığı hakkında hiçbir fikrim yok . Ancak bunun herhangi bir programlama içeriğine sahip olmadığı için Farklı veya Süper Kullanıcıya Sor durumunda daha iyi olacağından şüpheleniyorum .
dmckee --- eski moderatör kedicik

1
Bence soru daha iyi ifade edilir: "Son mermi çıktıktan sonra Terminalden Nasıl Çıkılır?".
Chris Sayfa

Yanıtlar:


194

Terminal.app içinde

Tercihler> Profiller> (Bir Profil Seçin)> Kabuk.

'Kabuk çıktığında' seçili 'Pencereyi kapat'


@PrabhuKonchada, bu alanı kullanıcı çıktılarını beslemek için kullanmak isteseydiniz çok kötü olmazdı, ancak aksi takdirde insanikov'un cevabı benim için iyi olurdu
Frankenmint

Açık ve temiz, mükemmel.
aydinugur

12
OS X'in daha yeni sürümlerinde, bu seçenek 'Tercihler> Profiller> (Bir Profil Seçin)> Kabuk altında bulunabilir.
XtraSimplicity

Daha fazla ve adım adım adım bilgisi için bağlantıyı kullanabilirsiniz cnet.com/news/terminal-tip-close-windows-after-clean-exit
Krishan Kumar Mourya

1
Ayrıca tüm profilleri seçebilir ve bir defada değişiklik yapabilirsiniz.

31

Eski güzel Command-Q'ya ne dersiniz?


Q komutunu kastediyor. Yine de bu iyi bir yöntem mi? Bana öldürmekten farklı görünmüyor.
darksteel

@darksteel: Command-Q, Mac'te bir uygulamayı kapatmanın doğru yoludur. Bir killall yapmak, uygulamanın temiz bir şekilde sonlandırması söylendiği için muhtemelen tamamdır.
tomlogic

2
Evet "Komut" yazmak istedim ama Ctrl olarak çıktı. Bunun bir PEBBAF vakası olduğunu söyleyebilirim (Beyin ve parmak uçları arasında sorun var).
holygeek

kill / killall, genellikle bir uygulamayı sonlandırmanın iyi bir yolu değildir. Bu, kaydedilmemiş durumu atabilir veya uygulamayı çıkarsanız uygulamanın nasıl görüneceğini doğru şekilde yansıtmayan kaydetme durumu olabilir. Mac OS X, programların onları öldürmenin güvenli olduğu bir durumda olduklarını (aslında SIGKILL ile) gösterebilecekleri ve bunu doğrulamak için Activity Monitor ile Terminal'in durumunu kontrol ettiyseniz "Ani Sonlandırma" özelliğine sahiptir. önce onu öldürmek güvenlidir ("Ani Sonlandırma" sütununu gösterin ve "Evet" i arayın), daha sonra bunu yapabilirsiniz, ancak bu iş akışını kolayca otomatikleştiremezsiniz.
Chris Sayfa

Çıkıştan sonra her zaman komut-Q kullanabiliriz, bu da tüm süreci kapatır ve ardından terminali kapatır.
Optimus Prime

29

Terminal uygulamasında, Tercih >> Profiller sekmesi.

Sağdaki Kabuk sekmesini seçin . görüntü açıklamasını buraya girin

Uyarıyı bastırmak için kapatmadan önce Asla Sorma'yı seçebilirsiniz .


5
Bunu When shell exits:"pencereyi kapat" ile başardım
Anup

1
Bu cevap "Asla" yı seçerek benim için işe yaramadı. Ancak @ Anup'ın "Pencereyi kapat" hakkındaki yorumu benim için hile yaptı.
Ultimater

12

Aslında, Terminalinizde bir yapılandırma ayarlamalısınız, Terminaliniz yukarıdayken + tuşuna basın, ,ardından aşağıdaki ekranı göreceksiniz:

görüntü açıklamasını buraya girin

Ardından kabuk sekmesine basın ve aşağıdaki ekranı göreceksiniz:

görüntü açıklamasını buraya girin

Şimdi seçmek Close if the shell exited cleanlyiçin zaman kabuk çıkmadan .

Yukarıdaki yapılandırma ile her seferinde exitkomutla Terminal kapanacak ancak çıkmayacaktır.


10

AppleScript'i şu osascriptkomutla kullanabilirsiniz :

osascript -e 'tell application "Terminal" to quit'

Osascript komutunu denemedim, ancak bununla ilgili iki sorunum var: 1. Bir komutun çıkması oldukça uzun. Daha basit olması gerekmez mi? Windows'ta çıkışın komut istemini nasıl sonlandırdığını seviyorum. 2. Yine de Terminal'den çıkmamı istiyor. Sadece hareketlerden geçmesini istiyorum. Gerçekten bırakmak isteyip istemediğimi soran bir pencere açıldı.
darksteel

1
@darksteel: 1. Kendi adınıza .bashrc(veya farklı bir kabuk kullanıyorsanız eşdeğerine) bir takma ad ekleyin . Hala 2'ye bir cevap düşünüyorum.
icktoofay

Bence komut Q en iyisi. Ancak bir takma adın nasıl düzgün bir şekilde ayarlanacağını merak ediyorum. Bir takma adı tercih edebilmek için yeterince sık yaptığım "ping google.com" gibi birkaç komut var.
darksteel

@darksteel: Bu çok fazla düşünmek, ancak 2'yi önlemek için, yaklaşık bir saniye uyuyan ve daha exitsonra daemonize işlemi başlattıktan sonra daemonize edilmiş bir işlem başlatabilirsiniz. Daemonized süreç bir saniye bekledikten sonra osascriptaçıklandığı gibi arayabilir .
icktoofay

@darksteel: Ayrıca aracılığıyla bir tuş tetikleyebilir osascript: tell application "System Events" to keystroke "a" using command down. Bu muhtemelen sorunu da beraberinde getirecektir.
icktoofay

9

Bir terminal penceresinde şunları yazabilirsiniz:

kill -9 $(ps -p $PPID -o ppid=)

Bu, kill komutu tarafından görüldüğü gibi, geçerli sürecin üst öğesinin ebeveyni olan Terminal uygulama sürecini öldürecektir.

Çalışan bir komut dosyasının içinden bir Terminal penceresini kapatmak için, işlem hiyerarşisinde aşağıdaki gibi bir düzey daha yukarı çıkmanız gerekir:

kill -9 $(ps -p $(ps -p $PPID -o ppid=) -o ppid=) 

7
Bilginize, bu çözüm diğer terminal pencerelerini de öldürüyor.
tresf

Ve kill -9diğer sinyallerin işe yaramayacağını bilmediğiniz sürece kullanmayın .
üçlü

9

Ben kullanıyorum ctrl + d. Sizi ilk etapta sqlite3 komutunu başlattığınız hedefe atar.


5

osascript -e "tell application \"System Events\" to keystroke \"w\" using command down"

Bu, CMD+ wtuşa basmayı simüle eder .

Terminal'in tamamen çıkmasını istiyorsanız şunları kullanabilirsiniz: osascript -e "tell application \"System Events\" to keystroke \"q\" using command down"

Bu herhangi bir hata vermez ve Terminal'in temiz bir şekilde durmasını sağlar.


4

Ayrıca, kendi sürecini sonlandırmakla ilgili bir uyarı tetiklemeyen bu kıvrımlı komutu da kullanabilirsiniz:
osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit

Bu komut oldukça uzun olduğundan, quitbash profilinizde bir takma ad (örneğin ) tanımlayabilirsiniz :
alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'

Bu, quitdiğer ayarlarla uğraşmak zorunda kalmadan sadece terminale yazmanıza izin verir .


2

Kullanım osascripticktoofay belirtildiği gibi kodunuzda komutu:osascript -e 'tell application "Terminal" to quit'

Ardından, Terminal tercihlerini açın, Ayarlar> Kabuk'a gidin ve "Kapatmadan önce sor:" seçeneğini "Asla" olarak ayarlayın. Terminal artık tamamen kapanmalı (yuvanızda açık kalmamalı) ve çıkmadan önce komut istemini görmezden gelmelidir. Açık olan yalnızca bir Terminal pencereniz varsa ve osascriptkomut son kod satırınızsa, bitirmek için daha önce çalıştırdığınız komutu beklemelidir.

Aynı pencerede veya arka planda diğer pencerelerde komut dosyaları çalıştırıyorsanız bu ideal olmaz (örneğin, arka planda bir komut çalıştırabilir ve ilk komutun ardından bir ve işareti varsa diğer komutlar için geçerli pencereyi kullanmaya devam edebilirsiniz. ); dikkatli ol!

Eğer sarın Eğer osascriptbir kabuk dosyasındaki kod, muhtemelen sürece Terminal arama yolunda olduğu gibi (çalıştırmak --- bunu vermek ne olursa olsun özlü dosya adıyla diyebilirsiniz echo $PATHkomut dosyaları için nereye Terminal görünüyor görmek için).


1

Bir komut dosyası oluşturun:

cat ~/exit.scpt

bunun gibi:

  • Not: Yalnızca bir pencere varsa, uygulamadan çıkın, yoksa command + wsekmeyi kapatmak için simüle edin)

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

Ardından * shrc'nize bir takma ad ekleyin

tıpkı vi ~/.bashrcveya zshrc(başka bir şey?)

ekleyin: alias exit="osascript ~/exit.scpt"

Ve ~ / .bashrc dosyasını kaynak gösterin veya terminal.app'ınızı yeniden açın


0

Kullanıyorum

çık-n terminali

senaryomun sonunda. Tercihlerde asla sorulmaması için terminali ayarlamanız gerekir

Yani Terminal> Tercihler> Ayarlar> Kabuk Kabuk çıktığı zaman Pencereyi kapat Asla kapatmadan önce sor


0

Burada cevapların birkaç varyasyonunu denedim. Ne denersem deneyeyim, her zaman kullanıcıdan Terminal'i kapatmasının istendiği bir kullanım örneği bulabilirim.

(Benim senaryom basit olduğu için drutil -drive 2 tray open- Belirli DVD sürücüsünü açmak için), kullanıcı yok değil komut dosyası çalışırken sırasında Terminal penceresi görmeliyim.

Çözümüm, komut dosyasını bir Terminal penceresi görüntülemeden komut dosyasını çalıştıran bir uygulamaya dönüştürmekti. Ek avantaj, zaten açık olan herhangi bir terminal penceresinin açık kalması ve hiçbiri açık değilse, Terminal'in komut dosyası bittikten sonra yerleşik kalmamasıdır. Bash betiğini çalıştırmak için Terminal'i hiç başlatmıyor gibi görünüyor.

Komut dosyamı bir uygulamaya dönüştürmek için şu talimatları izledim: https://superuser.com/a/1354541/162011


-3

Bu bir Mac ise, 'çıkış' yazıp ardından geri dön tuşuna basın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.