如何在 OS X Lion 退出时自动关闭 Terminal.app?

如何在 OS X Lion 退出时自动关闭 Terminal.app?

我最近购买了一台装有 OS X Lion 的新 Mac,我正在根据自己的需要对其进行调整。

我尝试使用终端的首选项配置自动关闭功能(就像我在 Tiger 和 Snow Leopard 中所做的那样),但不起作用。我设置了“如果 shell 正常退出则关闭”,但当我输入 时exit,窗口会关闭,但 Terminal.app 仍处于打开状态。它的菜单可见,使用alt+tab我可以看到它在运行。

有什么建议么?

答案1

此选项从未关闭终端应用程序。

请注意,其他选项的标题为关上窗户不要关闭窗户强调我的),明确表示此设置仅指关闭窗户,不是全部应用


您可以为您的 shell 定义以下内容,例如在~/.bash_profilefor中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 的测试确保该代码仅在终端内运行时才有效。

由于这是异步运行的,因此脚本可能会在包含它的终端关闭之前或之后运行(尽管它通常在之后运行),并且如果由于用户退出终端而关闭此终端,则脚本运行时终端可能不再运行,因此:

  1. 首先,它检查终端是否仍在运行。如果没有,它什么也不做。
  2. 仅当没有打开任何终端或只打开当前 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"

漂亮啊?

相关内容