当我完成终端,我想退出它。现在,我有三个选择:
杀死终端。它将结束这个过程,但相当突然。我不认为这是最好的主意。
呼叫出口。我已经改变了设置,所以退出关闭终端。这个应用程序在 Dock 中仍然是打开的,并且不能做我想让它做的事情。
右键单击“退出”。但是,这不是退出的终端命令。
那么现在,我应该如何退出和关闭终端?我听说过一些关于 osascript 的事情,但是我不太确定。我想退出和关闭,以便终端不再打开,既作为一个窗口,也作为一个进程。
老指挥官怎么样?
您可以通过 osascript命令使用 AppleScript:
osascript
osascript -e 'tell application "Terminal" to quit'
使用代码中的 osascript命令,就像 icktofay 提到的那样: osascript -e 'tell application "Terminal" to quit'
然后,打开终端首选项,转到“设置”> “外壳”,并将“关闭前提示”设置为“从不”终端现在应该完全退出(不保持打开在您的坞) ,并忽略提示退出之前。如果您只有一个终端窗口打开,并且 osascript命令是您的最后一行代码,那么它应该等待您之前运行的任何命令完成。
如果您在同一个窗口或其他后台窗口中运行脚本(例如,您可能在后台运行一个命令,并继续使用当前窗口执行其他命令,如果第一个命令后面跟着一个与号) ,那么这将是不理想的;!
如果您将 osascript代码封装在一个 shell 脚本文件中,那么您可以使用任何简洁的文件名来调用它——只要它在 Terminal 的搜索路径中(运行 echo $PATH查看 Terminal 在哪里查找脚本)。
echo $PATH
我一直在吸毒
退出终端
在我的脚本结束。你必须有终端设置,从来没有提示在首选项
所以终端 > 首选项 > 设置 > 外壳程序 当外壳退出的时候 把窗户关上 关门前提示 从来没有
在终端窗口中,您可以键入:
kill -9 $(ps -p $PPID -o ppid=)
这将杀死 Terminal 应用程序进程,它是当前进程的父进程的父进程,如 kill 命令所示。
要从运行的脚本中关闭终端窗口,您需要在流程层次结构中上升一级,如下所示:
kill -9 $(ps -p $(ps -p $PPID -o ppid=) -o ppid=)
如果这是一台 Mac 电脑,你可以输入“ exit”,然后按回车键。
我一直在用 ctrl + d。它将您抛出到最初启动 sqlite3命令的目标位置。
ctrl + d
在 Terminal. app 里
首选项 > 配置文件 > (选择配置文件) > Shell。
在“ When the shell exit”中选择“ Close the window”
您还可以使用这个复杂的命令,它不会触发关于终止其自身进程的警告: osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit
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
alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'
这将允许您在终端中简单地键入 quit,而不必修改任何其他设置。
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"
osascript -e "tell application \"System Events\" to keystroke \"q\" using command down"
这不给任何错误,并使终端干净地停止。
在终端应用程序中,偏好 > > 档案选项卡。
选择右边的 壳牌选项卡。
可以选择 从来没有“关闭前询问”来禁止显示警告。
cat ~/exit.scpt
command + w
告诉应用程序“终端” 设置 WindowNum 以获取窗口计数 如果 WindowNum = 1,则 辞职 别的 通过向下命令告诉应用程序“ System Events”按键输入“ w” 结束如果 结束讲述
就像 vi ~/.bashrc或者 zshrc(还有什么?)
vi ~/.bashrc
zshrc
再加上: alias exit="osascript ~/exit.scpt"
alias exit="osascript ~/exit.scpt"
实际上,你应该在你的终端设置一个配置,当你的终端启动时,按 ⌘ + ,,然后你会看到下面的屏幕:
然后按 shell 选项卡,你会看到下面的屏幕:
现在为 当外壳退出的时候选择 Close if the shell exited cleanly。
Close if the shell exited cleanly
通过以上配置每次与 exit命令终端将关闭,但不会退出。
exit
我在这里尝试了几种不同的答案。无论我尝试什么,我总能找到一个用例,其中用户被提示关闭终端。
由于我的脚本是一个简单的(drutil -drive 2 tray open——打开一个特定的 DVD 驱动器) ,用户需要在运行脚本时看到终端窗口。
drutil -drive 2 tray open
我的解决方案是将脚本转换成一个应用程序,它运行脚本而不显示终端窗口。附加的好处是,任何已经打开的终端窗口保持打开状态,如果没有打开,那么终端不会在脚本结束后继续驻留。它似乎根本没有启动 Terminal 来运行 bash 脚本。
我按照这些说明将我的脚本变成了一个应用程序: https://superuser.com/a/1354541/162011
这就是我刚刚编写的命令所做的。我希望能够创建一个“快捷方式”到苹果配置器的备份目录,工作在不同的计算机上,但因为它是相对于用户的主目录,我需要使它成为一个 .command文件。以下是内容:
.command
#!/usr/bin/env bash open "${HOME}/Library/Application Support/MobileSync/Backup" (sleep 0.1 ; osascript -e 'tell application "Terminal" to quit') &