如何在运行shell脚本后让Mac“.command”文件自动退出?

时间:2010-04-02 09:33:56

标签: macos shell scripting command

在我的shell脚本中,我的最后一行是:

...
echo "$l" done
done

exit

我将终端首选项设置为“当shell退出时:关闭窗口”。在所有其他情况下,当我在“终端”中键入“exit”或“logout”时,窗口关闭,但对于此“.command”文件(我可以双击我的shell脚本文件,脚本运行),关闭窗口,当文件的代码显示“退出”时,屏幕上显示的是:

...
$l done
logout

[Process completed]

......窗口仍然打开。有谁知道如何运行shell脚本,然后在完成时自动退出终端窗口?

谢谢!

7 个答案:

答案 0 :(得分:23)

我终于能够找到答案。与cobbal的答案类似,它调用AppleScript,但由于它是我打开的唯一窗口,并且我想将脚本作为一个快速的开启和关闭操作运行,这种更粗野的方法对我来说非常有用。 / p>

在“.command”脚本本身中,“...将此行添加到最后的脚本”

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

消息来源:http://forums.macosxhints.com/archive/index.php/t-2538.html

答案 1 :(得分:19)

这对我来说非常有用..它只是关闭了执行窗口,让其他终端窗口打开

打开终端,然后转到终端>偏好>设置>壳牌:>当shell退出时: - >如果shell干净利落地关闭

然后只需添加退出;在你的文件的末尾。

答案 2 :(得分:4)

使用'终端>偏好>设置>壳牌:>当shell退出时: - >如果外壳干净利落,请关闭。上面提到的选项,但是把

exit 0

作为命令文件的最后一行。这确保了脚本确实可以“干净利落地”退出。 - 否则如果上一个命令没有返回成功,则窗口不会关闭。

答案 3 :(得分:0)

终端应用程序中有此设置。不幸的是,它与所有终端窗口相关,而不仅仅是通过.command文件启动的窗口。

答案 4 :(得分:0)

你可以使用一些AppleScript黑客攻击:

tell application "Terminal"
    repeat with i from 1 to number of windows
        if (number of (tabs of (item i of windows) whose tty is "/dev/ttys002")) is not 0 then
            close item i of windows
            exit repeat
        end if
    end repeat
end tell 

用你的tty替换/dev/ttys002

答案 5 :(得分:0)

我在我的脚本中使用以下命令

退出-n终端

当然,您必须将终端设置为在关闭之前永不提示。

答案 6 :(得分:0)

除了必须使用上面的AppleScript解决方案之外,这是唯一有效的shell脚本解决方案(exit没有),即使突然,对我来说(在OS X 10.9中测试):< / p>

...
echo "$l" done
done

killall Terminal

当然这将终止所有正在运行的终端实例,因此如果您在启动脚本之前处理终端窗口,它也将终止。幸运的是,重新启动终端可以让你进入&#34;恢复&#34;但是,但是,这必须仅考虑边缘情况,而不是一个干净的解决方案。