OSX - Cách tự động Đóng cửa sổ Terminal sau khi thực hiện lệnh “exit”.


104

Khi tôi sử dụng xong Terminal, tôi muốn thoát khỏi nó. Ngay bây giờ, tôi có ba lựa chọn:

  1. killall Terminal. Nó sẽ kết thúc quá trình, nhưng khá đột ngột. Tôi không nghĩ đây là ý tưởng tốt nhất.

  2. Thoát cuộc gọi. Tôi đã thay đổi cài đặt để thoát sẽ đóng Terminal. Tuy nhiên, ứng dụng vẫn mở trong Dock và không làm những gì tôi muốn.

  3. Nhấp chuột phải> Thoát. Tuy nhiên, đây không phải là lệnh Terminal để thoát khỏi nó.

Vậy bây giờ, cách tôi nên thoát và đóng Terminal là gì? Tôi đã nghe vài điều về osascript nhưng tôi không chắc lắm. Tôi muốn thoát và đóng, để Terminal không còn mở nữa, cả dưới dạng cửa sổ và quá trình.


Giống như kill, killallmặc định là gửi SIGTERM, có thể bị bắt. Một số chương trình bắt được nó, tự dọn dẹp và thoát ra một cách duyên dáng. Không biết nếu Terminal.appnằm trong số đó. Tuy nhiên, tôi nghi ngờ điều này sẽ tốt hơn khi Hỏi người dùng khác hoặc Người dùng siêu cấp vì nó dường như không có bất kỳ nội dung lập trình nào.
dmckee --- cựu điều hành kitten

1
Tôi nghĩ câu hỏi sẽ tốt hơn "Làm thế nào để thoát khỏi Terminal sau khi thoát khỏi shell cuối cùng?".
Chris Page

Câu trả lời:


194

trong Terminal.app

Tùy chọn> Cấu hình> (Chọn cấu hình)> Shell.

trên 'Khi trình bao thoát' được chọn 'Đóng cửa sổ'


@PrabhuKonchada wouldnt là quá khủng khiếp nếu bạn muốn sử dụng không gian để sản xuất thức ăn chăn nuôi sử dụng nhưng nếu không trả lời insanikov của sẽ có done quife tốt cho tôi
Frankenmint

Rõ ràng và sạch sẽ, hoàn hảo.
aydinugur

12
Trong các phiên bản OS X mới hơn, bạn có thể tìm thấy tùy chọn này trong 'Preferences> Profiles> (Select a Profile)> Shell.
XtraSimparies

Bạn có thể sử dụng liên kết để biết thêm thông tin và bước bước khôn ngoan cnet.com/news/terminal-tip-close-windows-after-clean-exit
Krishan Kumar Mourya

1
Bạn cũng có thể chọn tất cả các cấu hình và thực hiện thay đổi cho tất cả cùng một lúc.

31

Làm thế nào về Command-Q cũ tốt?


Ý anh ta là lệnh Q. Đây có phải là một phương pháp tốt không? Nó dường như không khác gì so với giết người đối với tôi.
darksteel

@darksteel: Command-Q là cách thích hợp để đóng ứng dụng trên Mac. Thực hiện một killall có lẽ cũng không sao vì ứng dụng được yêu cầu kết thúc hoàn toàn.
tomlogic

2
Vâng, tôi định gõ "Command" nhưng nó xuất hiện dưới dạng Ctrl. Tôi muốn nói đó là một trường hợp của PEBBAF (Vấn đề tồn tại giữa não và đầu ngón tay).
Holygeek

kill / killall nói chung không phải là cách tốt để chấm dứt ứng dụng. Điều đó có thể loại bỏ trạng thái chưa lưu hoặc trạng thái lưu không phản ánh chính xác cách ứng dụng sẽ trông như thế nào nếu bạn Thoát nó. Mac OS X có tính năng “Chấm dứt đột ngột” trong đó các chương trình có thể cho biết khi nào chúng ở trạng thái an toàn để giết chúng (thực tế là với SIGKILL) và nếu bạn đã kiểm tra trạng thái của Terminal bằng Activity Monitor để xác minh điều đó trước tiên là an toàn để giết nó (hiển thị cột “Chấm dứt đột ngột” và tìm “Có”), sau đó bạn có thể làm như vậy, nhưng bạn không thể dễ dàng tự động hóa quy trình làm việc đó.
Chris Page

Chúng ta luôn có thể sử dụng lệnh-Q sau khi thoát, lệnh này đóng tất cả quá trình và sau đó đóng thiết bị đầu cuối.
Optimus Prime

29

Trong ứng dụng Terminal, tab Preference >> Profiles .

Chọn tab Shell ở bên phải. nhập mô tả hình ảnh ở đây

Bạn có thể chọn Không bao giờ hỏi trước khi đóng để loại bỏ cảnh báo.


5
Tôi đã đạt được điều này bằng cách When shell exits:"đóng cửa sổ"
Anup

1
Câu trả lời này không phù hợp với tôi khi chọn "Không bao giờ". Tuy nhiên, nhận xét của @ Anup về "Đóng cửa sổ" đã giúp tôi.
Ultimater

12

Trên thực tế, bạn nên thiết lập một cấu hình trên Thiết bị đầu cuối của mình, khi Thiết bị đầu cuối của bạn được khởi động, hãy nhấn + ,sau đó bạn sẽ thấy màn hình bên dưới:

nhập mô tả hình ảnh ở đây

Sau đó nhấn tab shell và bạn sẽ thấy màn hình bên dưới:

nhập mô tả hình ảnh ở đây

Bây giờ chọn Close if the shell exited cleanlycho Khi thoát vỏ .

Theo cấu hình trên mỗi lần bằng exitlệnh Terminal sẽ đóng nhưng không thoát.


10

Bạn có thể sử dụng AppleScript thông qua osascriptlệnh:

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

Tôi chưa thử lệnh osascript, nhưng có hai vấn đề tôi gặp phải với điều này: 1. Lệnh này khá lâu để thoát. Không nên đơn giản hơn sao? Tôi thích cách thoát khỏi dấu nhắc lệnh trong Windows. 2. Nó vẫn nhắc tôi thoát khỏi Terminal. Tôi muốn nó chỉ đi qua các chuyển động. Một cửa sổ hiện ra hỏi tôi có thực sự muốn bỏ thuốc lá không.
darksteel

1
@darksteel: 1. Thêm bí danh trong của bạn .bashrc(hoặc tương đương nếu bạn sử dụng một trình bao khác). Tôi vẫn đang nghĩ đến việc một câu trả lời cho 2.
icktoofay

Tôi nghĩ lệnh Q hoạt động tốt nhất. Nhưng tôi tò mò về cách thiết lập bí danh đúng cách. Có một vài lệnh như "ping google.com" mà tôi thường làm đủ để tôi có thể thích một bí danh hơn.
darksteel

@darksteel: Đây là cách suy nghĩ quá mức, nhưng để ngăn chặn thứ 2, bạn có thể bắt đầu quá trình daemonized ngủ khoảng một giây và sau đó exitsau khi bắt đầu quá trình daemonized. Sau khi quá trình daemonized đợi một giây, nó có thể gọi osascriptnhư mô tả.
icktoofay

@darksteel: Bạn cũng có thể kích hoạt một phím nhấn thông qua osascript: tell application "System Events" to keystroke "a" using command down. Tuy nhiên, điều này cũng có thể có vấn đề.
icktoofay

9

Trong cửa sổ dòng lệnh, bạn có thể nhập:

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

Thao tác này sẽ giết tiến trình ứng dụng Terminal, là tiến trình cha của tiến trình hiện tại, như đã thấy trong lệnh kill.

Để đóng cửa sổ Terminal từ bên trong tập lệnh đang chạy, bạn cần phải tăng thêm một cấp nữa trong hệ thống phân cấp quy trình như sau:

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

7
FYI, giải pháp này cũng giết các cửa sổ đầu cuối khác.
tresf

Và không sử dụng kill -9trừ khi bạn biết các tín hiệu khác sẽ không hoạt động.
tripleee

9

Tôi đã được sử dụng ctrl + d. Nó đưa bạn đến đích nơi Bạn đã bắt đầu lệnh sqlite3 ngay từ đầu.


5

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

Thao tác này mô phỏng thao tác nhấn phím CMD+ w.

Nếu bạn muốn Terminal thoát hoàn toàn, bạn có thể sử dụng: osascript -e "tell application \"System Events\" to keystroke \"q\" using command down"

Điều này không gây ra bất kỳ lỗi nào và làm cho Trạm dừng hoàn toàn.


4

Bạn cũng có thể sử dụng lệnh phức tạp này, lệnh này không kích hoạt cảnh báo về việc chấm dứt quy trình của chính nó:
osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit

Lệnh này khá dài, vì vậy bạn có thể xác định bí danh (chẳng hạn như quit) trong hồ sơ bash của mình:
alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'

Điều này sẽ cho phép bạn chỉ cần nhập quitvào thiết bị đầu cuối mà không cần phải thao tác với bất kỳ cài đặt nào khác.


2

Sử dụng osascriptlệnh trong mã của bạn như icktoofay đã đề cập:osascript -e 'tell application "Terminal" to quit'

Sau đó, mở tùy chọn Terminal, đi tới Cài đặt> Vỏ và đặt "Nhắc trước khi đóng:" thành "Không bao giờ". Bây giờ thiết bị đầu cuối sẽ thoát hoàn toàn (không vẫn mở trong thanh công cụ của bạn) và bỏ qua lời nhắc trước khi thoát. Nếu bạn chỉ có một cửa sổ Terminal đang mở và osascriptlệnh là dòng mã cuối cùng của bạn, nó sẽ đợi bất kỳ lệnh nào bạn chạy trước đó kết thúc.

Điều này sẽ không lý tưởng nếu bạn đang chạy tập lệnh trong cùng một cửa sổ hoặc các cửa sổ khác ở chế độ nền (ví dụ: bạn có thể chạy một lệnh trong nền và tiếp tục sử dụng cửa sổ hiện tại cho các lệnh khác nếu lệnh đầu tiên được theo sau bởi dấu và ); hãy cẩn thận!

Nếu bạn bọc osascriptmã trong tệp kịch bản shell, bạn có thể gọi nó bằng bất kỳ tên tệp nào bạn đặt cho nó --- miễn là nó nằm trong đường dẫn tìm kiếm của Terminal (chạy echo $PATHđể xem Terminal tìm kiếm script ở đâu).


1

Tạo một tập lệnh:

cat ~/exit.scpt

như thế này:

  • Lưu ý: Nếu chỉ có một cửa sổ, chỉ cần thoát ứng dụng, còn lại mô phỏng command + wđể đóng 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

Sau đó, thêm bí danh trong * shrc của bạn

giống như vi ~/.bashrchoặc zshrc(bất cứ điều gì khác?)

thêm nó: alias exit="osascript ~/exit.scpt"

Và nguồn ~ / .bashrc hoặc mở lại terminal.app của bạn


0

Tôi đã sử dụng

đầu cuối bỏ -n

ở cuối kịch bản của tôi. Bạn phải đặt thiết bị đầu cuối để không bao giờ nhắc trong tùy chọn

So Terminal> Preferences> Settings> Shell Khi shell thoát ra Đóng cửa sổ Nhắc trước khi đóng Không bao giờ


0

Tôi đã thử một số biến thể của các câu trả lời ở đây. Bất kể tôi cố gắng gì, tôi luôn có thể tìm thấy một trường hợp sử dụng mà người dùng được nhắc đóng Thiết bị đầu cuối.

Vì tập lệnh của tôi rất đơn giản ( drutil -drive 2 tray open- để mở một ổ đĩa DVD cụ thể), người dùng không cần nhìn thấy cửa sổ Terminal trong khi tập lệnh chạy.

Giải pháp của tôi là biến tập lệnh thành một ứng dụng chạy tập lệnh mà không hiển thị cửa sổ Terminal. Lợi ích bổ sung là bất kỳ cửa sổ đầu cuối nào đã mở vẫn mở và nếu không có cửa sổ nào đang mở, thì Thiết bị đầu cuối sẽ không cư trú sau khi tập lệnh kết thúc. Dường như nó không khởi chạy Terminal để chạy tập lệnh bash.

Tôi đã làm theo các hướng dẫn sau để biến tập lệnh của mình thành một ứng dụng: https://superuser.com/a/1354541/162011


-3

Nếu đây là máy Mac, bạn gõ 'exit' rồi nhấn quay lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.