OSX - Cara menutup jendela Terminal secara otomatis setelah perintah "keluar" dijalankan.

104

Setelah selesai dengan Terminal, saya ingin keluar. Saat ini, saya memiliki tiga opsi:

  1. killall Terminal. Ini akan mengakhiri prosesnya, melainkan tiba-tiba. Saya tidak berpikir ini adalah ide terbaik.

  2. Keluar panggilan. Saya telah mengubah pengaturan jadi keluar menutup Terminal. Aplikasi tersebut masih tampak terbuka di Dock, dan tidak melakukan apa yang saya inginkan.

  3. Klik kanan> Quit. Namun, ini bukan perintah Terminal untuk keluar.

Jadi sekarang, bagaimana cara saya keluar dan menutup Terminal? Saya pernah mendengar sesuatu tentang osascript tetapi saya tidak terlalu yakin. Saya ingin keluar dan menutup, sehingga Terminal tidak lagi terbuka, baik sebagai jendela maupun sebagai proses.

baja gelap
sumber
Seperti kill, killalldefault untuk mengirim SIGTERM, yang bisa ditangkap. Beberapa program menangkapnya, membersihkan dirinya sendiri dan keluar dengan anggun. Tidak tahu apakah Terminal.appada di antara mereka. Namun, saya curiga ini akan lebih baik pada Ask Different atau Super User dalam keadaan darurat karena sepertinya tidak memiliki konten pemrograman apa pun.
dmckee --- mantan moderator anak kucing
1
Saya pikir pertanyaannya akan lebih baik diutarakan "Bagaimana Cara Keluar dari Terminal setelah shell terakhir keluar?".
Chris Halaman

Jawaban:

194

di Terminal.app

Preferensi> Profil> (Pilih Profil)> Shell.

pada 'Saat shell keluar' pilih 'Tutup jendela'

Bangsawan tinggi
sumber
@PrabhuKonchada tidak akan terlalu buruk jika Anda ingin menggunakan ruang itu untuk memberi makan keluaran pengguna tetapi jika tidak, jawaban insanikov akan membuat saya baik-baik saja
Frankenmint
Jelas dan bersih, sempurna.
aydinugur
12
Di versi OS X yang lebih baru, opsi ini dapat ditemukan di 'Preferensi> Profil> (Pilih Profil)> Shell.
XtraSimplicity
Anda dapat menggunakan tautan untuk info langkah lebih lanjut dan langkah bijak cnet.com/news/terminal-tip-close-windows-after-clean-exit
Krishan Kumar Mourya
1
Anda juga dapat memilih semua profil, dan melakukan perubahan ke semua sekaligus.
31

Bagaimana dengan Command-Q yang lama?

Holygeek
sumber
Dia memang bermaksud perintah Q. Apakah ini metode yang bagus? Sepertinya tidak ada bedanya dengan killall bagiku.
darksteel
@darksteel: Command-Q adalah cara yang tepat untuk menutup aplikasi di Mac. Melakukan killall mungkin juga OK karena aplikasi diberitahu untuk berhenti dengan bersih.
tomlogic
2
Ya, saya bermaksud mengetik "Command" tetapi hasilnya adalah Ctrl. Saya akan mengatakan ini kasus PEBBAF (Masalah ada antara otak dan ujung jari).
Holygeek
kill / killall bukanlah cara yang baik untuk menghentikan aplikasi, umumnya. Tindakan tersebut dapat membuang status yang belum disimpan, atau menyimpan status yang tidak benar-benar mencerminkan tampilan aplikasi jika Anda Keluar. Mac OS X memang memiliki fitur "Penghentian Mendadak" di mana program dapat menunjukkan ketika mereka dalam keadaan di mana aman untuk membunuh mereka (dengan SIGKILL, pada kenyataannya), dan jika Anda memeriksa status Terminal dengan Monitor Aktivitas untuk memverifikasi bahwa aman untuk mematikannya terlebih dahulu (tunjukkan kolom "Penghentian Mendadak" dan cari "Ya"), Anda dapat melakukannya, tetapi Anda tidak dapat dengan mudah mengotomatiskan alur kerja tersebut.
Chris Halaman
Kami selalu dapat menggunakan perintah-Q setelah keluar, yang menutup semua proses dan kemudian menutup terminal.
Optimus Prime
29

Di aplikasi Terminal, tab Preferensi >> Profil .

Pilih tab Shell di sebelah kanan. masukkan deskripsi gambar di sini

Anda dapat memilih Never Ask sebelum menutup untuk menekan peringatan.

Blaise
sumber
5
Saya mencapai ini dengan When shell exits:"tutup jendela"
Anup
1
Jawaban ini tidak berhasil untuk saya dengan memilih "Tidak pernah". Namun komentar @ Anup tentang "Tutup jendela" melakukan trik untuk saya.
Ultimater
12

Sebenarnya, Anda harus mengatur konfigurasi di Terminal Anda, ketika Terminal Anda sudah habis tekan + ,maka Anda akan melihat layar di bawah ini:

masukkan deskripsi gambar di sini

Kemudian tekan tab shell dan Anda akan melihat layar di bawah ini:

masukkan deskripsi gambar di sini

Sekarang pilih Close if the shell exited cleanlyuntuk Ketika keluar shell .

Dengan konfigurasi di atas setiap kali dengan exitperintah, Terminal akan menutup tetapi tidak mau berhenti.

AmerllicA
sumber
10

Anda dapat menggunakan AppleScript melalui osascriptperintah:

osascript -e 'tell application "Terminal" to quit'
icktoofay
sumber
Saya belum mencoba perintah osascript, tetapi ada dua masalah yang saya alami dengan ini: 1. Perintah berhenti agak lama. Bukankah seharusnya lebih sederhana? Saya suka di Windows bagaimana keluar mengakhiri command prompt. 2. Itu masih meminta saya untuk keluar dari Terminal. Saya ingin itu hanya melalui gerakan saja. Sebuah jendela muncul menanyakan apakah saya benar-benar ingin berhenti.
darksteel
1
@darksteel: 1. Tambahkan alias di Anda .bashrc(atau yang setara jika Anda menggunakan shell yang berbeda). Saya masih memikirkan jawaban untuk 2.
icktoofay
Saya pikir perintah Q bekerja paling baik. Tapi saya penasaran bagaimana cara mengatur alias dengan benar. Ada beberapa perintah seperti "ping google.com" yang cukup sering saya lakukan sehingga saya mungkin lebih memilih alias.
darksteel
@darksteel: Ini adalah cara berpikir berlebihan, tetapi untuk mencegah 2, Anda dapat memulai proses daemonisasi yang tidur sekitar satu detik, dan kemudian exitsetelah memulai proses daemonisasi. Setelah proses daemonized menunggu sebentar, itu bisa dipanggil osascriptseperti yang dijelaskan.
icktoofay
@darksteel: Anda juga dapat memicu tombol ditekan melalui osascript: tell application "System Events" to keystroke "a" using command down. Ini mungkin akan memiliki masalah juga.
icktoofay
9

Di jendela terminal, Anda dapat mengetik:

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

Ini akan menghentikan proses aplikasi Terminal, yang merupakan induk dari proses saat ini, seperti yang terlihat oleh perintah kill.

Untuk menutup jendela Terminal dari dalam skrip yang sedang berjalan, Anda perlu naik satu tingkat lagi dalam hierarki proses seperti ini:

kill -9 $(ps -p $(ps -p $PPID -o ppid=) -o ppid=) 
GOTO 0
sumber
7
FYI, solusi ini juga membunuh jendela terminal lainnya.
tresf
Dan jangan gunakan kill -9kecuali Anda tahu sinyal lain tidak akan berfungsi.
tripleee
9

Saya telah menggunakan ctrl + d. Ini melempar Anda ke tujuan di mana Anda telah memulai perintah sqlite3 di tempat pertama.

kalafun
sumber
5

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

Ini mensimulasikan penekanan tombol CMD+ w.

Jika Anda ingin Terminal berhenti sepenuhnya, Anda dapat menggunakan: osascript -e "tell application \"System Events\" to keystroke \"q\" using command down"

Ini tidak memberikan kesalahan apa pun dan membuat Terminal berhenti dengan bersih.

insanikov
sumber
4

Anda juga dapat menggunakan perintah berbelit-belit ini, yang tidak memicu peringatan tentang penghentian prosesnya sendiri:
osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit

Perintah ini cukup panjang, jadi Anda bisa menentukan alias (seperti quit) di profil bash Anda:
alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'

Ini akan memungkinkan Anda untuk mengetik quitke terminal tanpa harus mengutak-atik pengaturan lain.

David P.
sumber
2

Gunakan osascriptperintah di kode Anda seperti yang disebutkan oleh icktoofay:osascript -e 'tell application "Terminal" to quit'

Kemudian, buka preferensi Terminal, buka Pengaturan> Shell, dan setel "Konfirmasi sebelum menutup:" ke "Tidak Pernah". Terminal sekarang harus berhenti sepenuhnya (tidak tetap terbuka di dok Anda) dan mengabaikan permintaan sebelum berhenti. Jika Anda hanya memiliki satu jendela Terminal yang terbuka dan osascriptperintah tersebut adalah baris kode terakhir Anda , perintah tersebut harus menunggu perintah apa pun yang Anda jalankan sebelum selesai.

Ini tidak akan ideal jika Anda menjalankan skrip di jendela yang sama atau jendela lain di latar belakang (misalnya, Anda dapat menjalankan perintah di latar belakang dan terus menggunakan jendela saat ini untuk perintah lain jika perintah pertama diikuti dengan tanda & ); hati-hati!

Jika Anda membungkus osascriptkode dalam file skrip shell, Anda mungkin dapat memanggilnya dengan nama file apa pun yang Anda berikan --- selama kode tersebut berada di jalur pencarian Terminal (jalankan echo $PATHuntuk melihat di mana Terminal mencari skrip).

John
sumber
1

Buat skrip:

cat ~/exit.scpt

seperti ini:

  • Catatan: Jika hanya ada satu jendela, cukup keluar dari aplikasi, jika tidak simulasikan command + wuntuk menutup tab)

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

Kemudian tambahkan alias di * shrc Anda

hanya suka vi ~/.bashrcatau zshrc(apa saja?)

tambahkan itu: alias exit="osascript ~/exit.scpt"

Dan sumber ~ / .bashrc atau buka kembali terminal.app Anda

Dosa
sumber
0

Saya telah menggunakan

keluar dari terminal -n

di akhir skrip saya. Anda harus mengatur terminal agar tidak pernah diminta dalam preferensi

Jadi Terminal> Preferensi> Pengaturan> Shell Saat shell keluar Tutup jendela Prompt sebelum menutup Never

Jon
sumber
0

Saya mencoba beberapa variasi jawaban di sini. Apa pun yang saya coba, saya selalu dapat menemukan kasus penggunaan di mana pengguna diminta untuk menutup Terminal.

Karena skrip saya sederhana ( drutil -drive 2 tray open- untuk membuka drive DVD tertentu), pengguna tidak perlu melihat jendela Terminal saat skrip berjalan.

Solusi saya adalah mengubah skrip menjadi aplikasi, yang menjalankan skrip tanpa menampilkan jendela Terminal. Manfaat tambahannya adalah bahwa setiap jendela terminal yang sudah terbuka tetap terbuka, dan jika tidak ada yang terbuka, Terminal tidak tetap tinggal setelah skrip berakhir. Tampaknya tidak meluncurkan Terminal sama sekali untuk menjalankan skrip bash.

Saya mengikuti petunjuk ini untuk mengubah skrip saya menjadi sebuah aplikasi: https://superuser.com/a/1354541/162011

James L.
sumber
-3

Jika ini adalah Mac Anda mengetik 'keluar' lalu tekan kembali.

Tremaine
sumber