Applescript或Shell脚本关闭OSX中每个未使用的终端窗口

时间:2015-04-20 14:12:59

标签: macos shell applescript

我有一个在OSX中的UI用户会话中运行的应用程序(在终端窗口中运行的单声道应用程序,命令行程序)。有时这个单声道app会因任何原因退出,并且每2分钟运行一次作为launchd检查的shell脚本,以查看ps ax | grep "mono"是否仅返回grep命令作为唯一的单声道进程。如果是这样,则生成一个新的终端窗口,并在该终端窗口中再次运行单声道程序。

无论如何,有时会留下大量的终端窗口。我想要的是要附加到这个shell脚本,或者可能在Applescript中,我可以在我的单声道应用程序中调用它来关闭每个没有运行单声道进程的终端窗口。 Applescript可以确定终端窗口是否正在运行某个程序? shell可以确定吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

我查看了这篇文章:osascript - How to close a Terminal tab using AppleScript? - Stack Overflow

tell application "Terminal"
    activate
    set wns to every window of it
    repeat with aWn in wns

        set theTabs to every tab of aWn
        repeat with i from (count theTabs) to 1 by -1
            set aTab to item i of theTabs
            if not (get busy of aTab) then
                tell aWn to set selected tab to tab i of aWn
                do script "exit" in tab i of aWn
            end if
        end repeat
    end repeat
end tell

如果这个过程不忙,那么显然目前还没有运行,这是我对此的看法。

问题是,如果你的单声道进程在前台运行,终端正忙,那么我猜你运行的脚本将被搁置。你可以做的是提取终端窗口的输出(文本),并在那里寻找你的单声道处理。 (我真的认为,关闭所有不繁忙的窗户是最好的。假设你有一个工作窗口,那么你可以为那个窗口分配一个特殊的标题,从而使用一个如果测试可以使它不被关闭。(大部分时间可能都不忙。)