如何關閉除運行 shell 腳本的視窗之外的所有打開的終端機窗口

如何關閉除運行 shell 腳本的視窗之外的所有打開的終端機窗口

我想知道是否可以在啟動 shell 腳本時關閉所有其他打開的控制台窗口,而不關閉運行 shell 腳本的窗口。

我正在使用 Kubuntu 的 16.04 konsole。

先致謝!

答案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。閱讀“視窗命令”部分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

相關內容