OSX-执行“退出”命令后如何自动关闭终端窗口。


104

完成Terminal后,我想退出它。现在,我有三个选择:

  1. Killall码头。它将终止该过程,但会突然结束。我认为这不是最好的主意。

  2. 呼叫退出。我更改了设置,因此退出关闭了终端。该应用程序仍然在Dock中显示为打开状态,并且没有执行我想要的操作。

  3. 右键单击>退出。但是,这不是退出它的终端命令。

那么,现在我应该如何退出并关闭Terminal?我听说过有关osascript的一些信息,但我不太确定。我想退出并关闭,以使终端不再作为窗口和进程打开。


Like killkillall默认为send SIGTERM,可以捕获。有些程序会捕获它,然后自行清理并正常退出。不知道是否Terminal.app在他们中间。但是,我怀疑这一点在“ 询问其他用户”或“超级用户” 上会更好,因为它似乎没有任何编程内容。
dmckee ---前主持人小猫,

1
我认为最好将问题表述为“在最后一个外壳退出后如何退出终端机?”。
克里斯·佩奇

Answers:


194

在Terminal.app中

首选项>配置文件>(选择配置文件)>外壳。

在“外壳退出时”上选择“关闭窗口”


@PrabhuKonchada不会是太可怕了,如果你想使用的空间饲料用户输出,但另有insanikov的回答会做quife对我很好
Frankenmint

明显,干净,完美。
aydinugur

12
在OS X的较新版本中,可以在“首选项>配置文件>(选择配置文件)> Shell”下找到此选项。
XtraSimplicity

您可以使用该链接获取更多详细的逐步信息 cnet.com/news/terminal-tip-close-windows-after-clean-exit
Krishan Kumar Mourya

1
您还可以选择所有配置文件,然后一次进行全部更改。

31

好的老式Command-Q怎么样?


他的确是命令Q。但这是一个好方法吗?对我来说,这似乎与杀戮无异。
darksteel 2011年

@darksteel:Command-Q是在Mac上关闭应用程序的正确方法。执行killall可能也可以,因为该应用程序被告知彻底终止。
tomlogic

2
是的,我打算输入“ Command”,但它以Ctrl形式出现。我会说这是PEBBAF(大脑和指尖之间存在问题)的情况。
holygeek 2011年

通常,kill / killall并不是终止应用程序的好方法。这可能会丢弃未保存的状态,或者保存无法正确反映您退出该应用程序的外观的状态。Mac OS X确实具有“突然终止”功能,程序可以指示它们何时处于可以安全杀死它们的状态(实际上是使用SIGKILL),以及是否通过“活动监视器”检查了Terminal的状态以验证首先将其杀死是安全的(显示“ Sudden Termination”(突然终止)列,然后查找“ Yes”),然后可以这样做,但是您不能轻松地自动化该工作流程。
克里斯·佩奇

退出后,我们总是可以使用command-Q,它会关闭所有进程,然后关闭终端。
擎天柱

29

在“终端”应用中,“首选项” >>“ 配置文件”选项卡。

选择右侧的“ 外壳”选项卡。 在此处输入图片说明

您可以选择关闭前询问”以禁止显示警告。


5
我通过When shell exits:“关闭窗口” 实现了这一目标
Anup

1
通过选择“从不”,此答案对我不起作用。但是,@ Anup关于“关闭窗口”的评论对我有用。
Ultimater

12

实际上,您应该在终端上设置一个配置,当终端启动时按+,,您将看到以下屏幕:

在此处输入图片说明

然后按shell标签,您将看到以下屏幕:

在此处输入图片说明

现在,选择Close if the shell exited cleanly当外壳退出时”

每次使用exit命令通过上述配置,终端将关闭但不会退出。


10

您可以通过以下osascript命令使用AppleScript :

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

我没有尝试过osascript命令,但是我有两个问题:1.退出命令的时间相当长。不应该更简单吗?我喜欢在Windows中退出如何终止命令提示符。2.它仍然提示我退出终端。我希望它只是通过议案。出现一个窗口,询问我是否真的想退出。
darksteel 2011年

1
@darksteel:1.在其中添加一个别名.bashrc(如果使用其他外壳,则添加别名)。我仍在思考2的答案
。– icktoofay

我认为命令Q最有效。但是我很好奇如何正确设置别名。我经常执行一些命令,例如“ ping google.com”,因此我可能更喜欢使用别名。
darksteel 2011年

@darksteel:这是一种过度思考的方式,但是要防止出现这种情况,可以启动一个睡眠约一秒钟exit的守护进程,然后启动该守护进程。守护进程等待一秒钟后,它可以osascript按照描述进行调用。
icktoofay

@darksteel:您还可以通过触发按键osascripttell application "System Events" to keystroke "a" using command down。但是,这可能也会有问题。
icktoofay

9

在终端窗口中,您可以输入:

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

如kill命令所示,这将终止终端应用程序进程,该进程是当前进程的父进程的父进程。

要从正在运行的脚本中关闭“终端”窗口,您需要在流程层次结构中再上一层,如下所示:

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

7
仅供参考,该解决方案也会杀死其他终端窗口。
tresf

kill -9除非您知道其他信号将不起作用,否则请勿使用。
人间

9

我一直在用ctrl + d。它会将您带到您首先启动sqlite3命令的目标位置。


5

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

这模拟了CMD+ w按键。

如果您希望终端完全退出,则可以使用: osascript -e "tell application \"System Events\" to keystroke \"q\" using command down"

这不会产生任何错误,并且可以使终端干净地停止。


4

您还可以使用此复杂的命令,该命令不会触发有关终止其自身进程的警告:
osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit

该命令很长,因此您可以quit在bash配置文件中定义一个别名(例如):
alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'

这将使您可以简单地quit在终端中键入内容,而无需进行任何其他设置。


2

osascript如icktoofay所述,在代码中使用命令:osascript -e 'tell application "Terminal" to quit'

然后,打开“终​​端”首选项,转到“设置”>“命令行管理程序”,然后将“关闭前提示:”设置为“从不”。终端现在应该完全退出(不要在扩展坞中保持打开状态),并在退出前忽略提示。如果只有一个“终端”窗口打开,并且该osascript命令是最后一行代码,则它应等待您运行的任何命令完成。

如果您在同一窗口或后台其他窗口中运行脚本,那么这将不是理想的选择(例如,您可以在后台运行命令,并在第一个命令后跟“&”号的情况下继续在当前窗口中使用其他命令) ); 小心!

如果将osascript代码包装在Shell脚本文件中,则可以使用您提供的任意文件名来调用它-只要它在Terminal的搜索路径中即可(运行echo $PATH以查看Terminal在哪里查找脚本)。


1

创建一个脚本:

cat ~/exit.scpt

像这样:

  • 注意:如果只有一个窗口,请退出应用程序,否则进行模拟command + w以关闭选项卡)

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

然后在* shrc中添加一个别名

就像vi ~/.bashrc还是zshrc(还有其他什么?)

添加: alias exit="osascript ~/exit.scpt"

并找到〜/ .bashrc或重新打开terminal.app


0

我一直在用

退出-n终端

在我的脚本结尾。您必须将终端设置为从不提示使用偏好

所以终端>首选项>设置>贝壳 外壳退出 关闭窗口 关闭之前提示 决不


0

我在这里尝试了几种不同的答案。无论我尝试什么,我总能找到一个提示用户关闭终端的用例。

由于我的脚本很简单(drutil -drive 2 tray open-可以打开特定的DVD驱动器),因此用户不会需要的时候看到脚本运行的终端窗口。

我的解决方案是将脚本转换为应用程序,该应用程序在不显示终端窗口的情况下运行脚本。额外的好处是,任何已打开的终端窗口都保持打开状态,如果没有打开,则脚本结束后终端不会保持驻留状态。似乎根本没有启动Terminal运行bash脚本。

我按照以下说明将脚本转换为应用程序:https : //superuser.com/a/1354541/162011


-3

如果是Mac,则键入“退出”,然后按回车键。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.