我最近购买了一台装有 OS X Lion 的新 Mac,我正在根据自己的需要对其进行调整。
我尝试使用终端的首选项配置自动关闭功能(就像我在 Tiger 和 Snow Leopard 中所做的那样),但不起作用。我设置了“如果 shell 正常退出则关闭”,但当我输入 时exit
,窗口会关闭,但 Terminal.app 仍处于打开状态。它的菜单可见,使用alt+tab我可以看到它在运行。
有什么建议么?
答案1
此选项从未关闭终端应用程序。
请注意,其他选项的标题为关上窗户和不要关闭窗户(强调我的),明确表示此设置仅指关闭窗户,不是全部应用。
您可以为您的 shell 定义以下内容,例如在~/.bash_profile
for中bash
:
function exit {
osascript -e 'tell application "Terminal" to quit'
}
然后将其添加osascript
到退出前不需要确认的应用程序列表中(在“首选项”>“设置”>“Shell”中)。键入exit
以退出终端,除非还有其他选项卡正在运行阻止程序。
exit
当然,你可以给它一个不同的名字,以区别于常规的。我喜欢quit
这个。
答案2
要在关闭最后一个终端/shell 后退出终端,您可以让 shell 在退出时运行 AppleScript:
# Quit Terminal when this shell exists if there are no other terminals open.
if [ "$TERM_PROGRAM" == "Apple_Terminal" ]; then
quit_terminal_when_no_terminals_remain() {
osascript -e 'tell application "Terminal" to if running and (count every tab of every window whose tty is not "'"$(tty)"'") is 0 then quit'
}
trap quit_terminal_when_no_terminals_remain EXIT
fi
Apple_Terminal 的测试确保该代码仅在终端内运行时才有效。
由于这是异步运行的,因此脚本可能会在包含它的终端关闭之前或之后运行(尽管它通常在之后运行),并且如果由于用户退出终端而关闭此终端,则脚本运行时终端可能不再运行,因此:
- 首先,它检查终端是否仍在运行。如果没有,它什么也不做。
- 仅当没有打开任何终端或只打开当前 tty 的终端时,它才会退出。它会检查除了当前 shell 所连接的 tty 设备“$(tty)”的选项卡之外,是否还有其他选项卡。
请注意,如果您调用任何其他捕获 EXIT 的 shell 代码,这些代码将相互干扰。解决方案是创建另一个调用其他函数的函数,并“捕获 the_other_function EXIT”以在 shell 退出时调用所有内容。
顺便说一句,一如既往,如果此功能对您很重要,请向 Apple 提交增强请求。请求首选项设置,以便在没有更多窗口打开时让终端退出:https://bugreport.apple.com/
答案3
作为一个巧妙的解决方案,请尝试-
open -a /Applications/Utilities/Terminal.app *.py 或 open -b com.apple.terminal *.py
对于启动的 shell,您可以进入“首选项”>“Shell”>将其设置为若无错误则退出。
当我需要几乎同时运行许多脚本/命令时我经常使用它。
就是这样。
答案4
一个更简单、更优雅的解决方案是在 .bash_profile 中设置别名,如下所示:
alias quit="killall Terminal"
漂亮啊?