![关闭所有 Mac 终端窗口,但运行脚本的窗口除外](https://linux22.com/image/1330883/%E5%85%B3%E9%97%AD%E6%89%80%E6%9C%89%20Mac%20%E7%BB%88%E7%AB%AF%E7%AA%97%E5%8F%A3%EF%BC%8C%E4%BD%86%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%E7%9A%84%E7%AA%97%E5%8F%A3%E9%99%A4%E5%A4%96.png)
我正在尝试创建一个 shell 脚本,该脚本在 4 个终端窗口中运行 Python 模拟编程。我有一个脚本,可以在四个单独的终端窗口中启动该程序四次(总共 5 个窗口,4 个用于 Python 程序,一个用于控制其他终端窗口)。我现在想创建一个可以在控制终端窗口中运行的脚本,该脚本会关闭并终止其他四个终端窗口的程序,但仍保持控制窗口打开。
我目前有的是这样的
#!/bin/sh
osascript -e 'tell app "Terminal"
do script "killall python"
end tell'
osascript -e 'tell app "Terminal" to quit'
osascript -e 'tell app "Terminal" to open'
问题是最后一行不起作用,因为它关闭了所有窗口,包括脚本正在执行的窗口。我不太熟悉 shell 或 apple 脚本,所以任何帮助都欢迎。我发帖在 Stack 上,但我认为这里可能更适合回答自动化类型的问题。谢谢
答案1
您可以将“主”窗口的 ID 分配给一个变量,然后在脚本结束时关闭所有 ID 与“主”窗口不匹配的窗口。AppleScript 部分可以按照以下方式编写:
tell application "Terminal"
set mainID to id of front window
-- insert your code
close (every window whose id ≠ mainID)
end tell
编辑
#!/bin/sh
killall python
osascript -e 'tell application "Terminal"' -e 'set mainID to id of front window' -e 'close (every window whose id ≠ mainID)' -e 'end tell'
答案2
如果运行脚本的窗口位于最前面,并且终端在关闭其他窗口时没有要求确认,您可以尝试这样的操作。
tell application "Terminal"
close rest of (get windows)
end tell