如何关闭除运行 shell 脚本的窗口之外的所有打开的终端窗口

如何关闭除运行 shell 脚本的窗口之外的所有打开的终端窗口

我想知道是否可以在启动 shell 脚本时关闭所有其他打开的控制台窗口,而不关闭运行 shell 脚本的控制台窗口。

我正在使用 Kubuntu 的 16.04 控制台。

提前致谢!

答案1

这与 Wayland 不兼容!如果您使用的是 Ubuntu 17.10 或更新版本,并且在登录时没有更改为使用 Xorg,则此解决方案不适合您。

对于我使用的此类任务xdotool,您可能需要先安装它:

sudo apt install xdotool

这是我的脚本:

#!/bin/bash
search="--class xterm"
a=$(xdotool getactivewindow getwindowpid)
b="$(xdotool search $search getwindowpid %@)"
for i in $b; do
  [[ $a -ne $i ]] &&
  echo kill $i
done

由于您没有提到您使用哪个终端仿真器,因此我在此处编写了脚本xterm,但您可以通过修改第二行中引用的部分轻松更改这一点。--class xterm是与窗口类xdotool --search的窗口匹配的选项xterm。阅读“WINDOW COMMANDS”部分man xdotool要了解这些选项,并测试它们,请使用

xdotool getactivewindow getwindowpid

获取活动终端窗口的 PID 和

xdotool search YOUROPTIONS getwindowpid %@

获取所有匹配的窗口的 PID YOUROPTIONS,例如

xdotool search --all --name yourwindowsname --desktop 1 --class getwindowpid %@

匹配yourwindowsname桌面上所有名为 的窗口1--all表示两个条件都要满足(逻辑“与”),默认意思--any相反。

当您一切就绪并且脚本输出正确的命令后,echo从中移除以执行kill操作。


事实证明,对于 KDE 来说,每个窗口konsole报告的 PIDxdotool都是相同的,所以我们需要这种略有不同的方法:

#!/bin/bash
search="--onlyvisible --class konsole"
a=$(xdotool getactivewindow) 
b="$(xdotool search $search)" 
for i in $b; do
  [[ $a -ne $i ]] &&
  xdotool windowclose $i
done

相关内容