当我完成终端的操作后,我想要退出。目前,我有三个选项:
使用killall Terminal。这会结束进程,但相对突然。我认为这不是最好的选择。
调用exit命令。我已更改设置,使得exit关闭终端。但该应用程序仍会在Dock中显示,并不能达到我的要求。
右键点击>退出。但这不是一个退出终端的终端命令。
那么,现在,我应该如何退出和关闭终端呢?我听说过osascript,但我不太确定。我想退出并关闭终端,以便终端不再作为窗口和进程打开。
在Terminal.app中
偏好设置 > 个人资料 > (选择一个个人资料)> Shell。
在“When the shell exits”选项中选择“关闭窗口”
.command
文件中使用&
进行关闭。如果你同意的话,发布一个带有足够解释和截图的问题,我会在那里发送完整描述的答案,并附上一个很好的例子。 - AmerllicA&
和nohup
。但是,是的,我计划发布一个关于这个问题的问题,因为我在互联网上还没有找到其他的东西。所以我很快就会这样做 :) - Lethargos那么传统的 Command-Q 怎么样?
你可以通过osascript
命令使用AppleScript:
osascript -e 'tell application "Terminal" to quit'
.bashrc
中添加一个别名(如果您使用不同的shell,则相应更改)。我还在考虑第2个问题的答案。 - icktoofayosascript
不喜欢从守护进程运行。老实说,我认为killall
就很好用了。 - icktoofay在终端窗口中,您可以输入:
kill -9 $(ps -p $PPID -o ppid=)
这将杀死终端应用程序的进程,该进程是当前进程的父进程的父进程,如kill命令所示。
要在运行的脚本内关闭终端窗口,您需要在进程层次结构中再往上一级,像这样:
kill -9 $(ps -p $(ps -p $PPID -o ppid=) -o ppid=)
kill -9
。 - tripleeeosascript -e "告诉应用程序 \"System Events\" 使用带有命令的键盘击键 \"w\""
这模拟了 CMD + w 键按下。
如果你想要完全退出终端,可以使用以下命令:
osascript -e "告诉应用程序 \"System Events\" 使用带有命令的键盘击键 \"q\""
这不会产生任何错误,并使终端干净地停止。
我一直在使用ctrl + d
。它会将您带回到最初开始使用sqlite3命令的地方。
osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit
这个命令非常长,所以你可以在bash配置文件中定义一个别名(比如quit
):alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'
这样,你就可以直接在终端中输入quit
而不需要调整其他设置。osascript
命令,如icktoofay所述:osascript -e 'tell application "Terminal" to quit'
然后,打开终端偏好设置,转到"设置">Shell,并将"在关闭之前提示:"设置为"从不"。终端现在应该完全退出(而不是留在dock中)并忽略退出之前的提示。如果您只打开了一个终端窗口,并且osascript
命令是您的最后一行代码,则它应该等待您在运行命令之前完成。osascript
代码包装在shell脚本文件中,您可能可以使用任何短小的文件名调用它,只要它在终端的搜索路径中(运行echo $PATH
查看终端查找脚本的位置)。
kill
命令一样,默认情况下,killall
也会发送SIGTERM
信号,这个信号可以被捕获。一些程序会捕获该信号,清理自己并正常退出,但我不确定Terminal.app
是否是其中之一。然而,考虑到它似乎没有任何编程内容,若有需要,建议在 Ask Different 或 Super User 上寻求帮助。 - dmckee --- ex-moderator kitten