从shell脚本(Unix)中关闭终端窗口?

时间:2012-01-10 04:40:07

标签: macos shell unix command

有没有办法在shell脚本中关闭终端窗口?我有一个.command文件,一旦完成就应该完全放弃。

6 个答案:

答案 0 :(得分:57)

使用exit 0将彻底终止脚本。

终端窗口是否保持打开是用户可配置的。默认设置是始终保持打开状态。要改变这个:

Terminal.app > Preferences > Profiles > Shell
    - "When the shell exists:"
        > Close if the shell exited cleanly
    - "Ask before closing:"
        (•) Never
        -- OR --
        (•) Only if there are....

当使用“如果shell干净地退出时关闭”,如果退出结果为0,脚本将关闭窗口,如果没有出错,这是默认值。

答案 1 :(得分:20)

由于您不想删除所有终端窗口,请先从"终端"更改窗口名称。别的东西:

  

echo -n -e" \ 033] 0;我的窗口名称\ 007"

然后在脚本的末尾,使用:

  

osascript -e'告诉应用程序"终端"关闭(每个窗口的名称包含"我的窗口名称")' &安培;

答案 2 :(得分:15)

您可以使用apple script 退出 terminal app。将以下内容添加到脚本中 -

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

这将为您提供一个确认关闭应用程序的弹出窗口。您可以在终端首选项中禁用此功能。

或者,您也可以使用killall命令退出应用程序。以下也适用。

killall Terminal

注意:

正如旁注,您可以自由地将上述命令添加到您的脚本中,它可以按您的需要工作。但是,有一些警告。 首先,您将限制脚本在不同的框上工作的能力。 其次,使用nohup会更安全,这样任何当前运行的命令都不会因退出Terminal app而退出。

答案 3 :(得分:9)

这对我有用:

#!/bin/sh

{your script here}

osascript -e 'tell application "Terminal" to close (every window whose name contains ".command")' &
exit

这将仅用于关闭使用.command文件打开的窗口,但保留已在其他终端窗口中运行的内容。我知道我几乎总是有sass或grunt看东西,所以我不想完全退出终端。

答案 4 :(得分:7)

closeWindow() {
    /usr/bin/osascript << _OSACLOSE_
    tell application "Terminal"
        close (every window whose name contains "YourScriptName")
    end tell
    delay 0.3
    tell application "System Events" to click UI element "Close" of sheet 1 of window 1 of application process "Terminal"
_OSACLOSE_
}

这将关闭脚本的终端窗口,并在其窗口标题不匹配时保持其他任何终端窗口打开。要使其工作,必须将终端添加到允许使用Accessibility框架的应用程序列表中。您还可以使用repeat命令在终端窗口中循环,并关闭每个窗口x,其中包含工作表1上的UI元素“关闭”。

答案 5 :(得分:5)

我发现最好的解决方案是使用Automator创建一个真正的OSX应用程序,无论您的系统配置如何,它都将以相同的方式工作。您可以让Automator运行您的shell脚本,或者您可以将shell脚本本身嵌入Automator中。

以下是您的操作方法:

  1. 运行Automator(在应用程序中)。
  2. 选择“新文档”及其时间 询问“为您的文档选择一种类型”选择“应用程序”
  3. 在 在左侧面板中,选择“Utilities”,然后选择“Run Shell Script”。
  4. 输入您的 右侧面板中工作流程项目中的脚本命令。你可以打电话给另一个 shell脚本,或直接将命令直接放入。
  5. 保存 应用程序,将成为一个完整的Mac应用程序。你甚至可以 从其他应用程序剪切并粘贴图标,以便为您的脚本提供一些帮助 的个性。