So schließen Sie alle geöffneten Terminalfenster mit Ausnahme des Fensters, in dem ein Shell-Skript ausgeführt wird

So schließen Sie alle geöffneten Terminalfenster mit Ausnahme des Fensters, in dem ein Shell-Skript ausgeführt wird

Ich möchte wissen, ob es möglich ist, beim Starten eines Shell-Skripts alle anderen geöffneten Konsolenfenster zu schließen, ohne das Fenster zu schließen, in dem das Shell-Skript ausgeführt wird.

Ich verwende die Kubuntu-Konsole 16.04.

Dank im Voraus!

Antwort1

Dies funktioniert nicht mit Wayland!Wenn Sie Ubuntu 17.10 oder neuer verwenden und bei der Anmeldung nicht auf Xorg umgestiegen sind, ist diese Lösung nicht für Sie geeignet.

Für Aufgaben wie diese verwende ich xdotool. Möglicherweise müssen Sie es zuerst mit folgendem installieren:

sudo apt install xdotool

Hier ist mein Skript:

#!/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

Da Sie nicht erwähnt haben, welchen Terminalemulator Sie verwenden, habe ich das Skript xtermhier geschrieben, aber Sie können dies leicht ändern, indem Sie den zitierten Teil in der zweiten Zeile ändern. --class xtermist eine xdotool --searchOption, die Fenstern der xtermFensterklasse entspricht. Lesen Sie den Abschnitt „FENSTERBEFEHLE“ vonman xdotoolUm diese Optionen kennenzulernen, sie zu testen, verwenden Sie

xdotool getactivewindow getwindowpid

um die PID des aktiven Terminalfensters zu erhalten und

xdotool search YOUROPTIONS getwindowpid %@

um die PIDs aller passenden Fenster zu erhalten YOUROPTIONS, zB

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

um alle Fenster mit dem gleichen Namen abzugleichen, yourwindowsnamedie sich auf dem Desktop befinden 1. --allbedeutet, dass beide Bedingungen erfüllt sein müssen (logisches „und“), die Standardeinstellung ist --anydie umgekehrte Bedeutung.

Wenn Sie alles eingestellt haben und das Skript die richtigen Befehle ausgibt, entfernen Sie echoes, um die killAktionen auszuführen.


Es stellt sich heraus, dass für KDE konsoledie von gemeldete PID xdotoolfür jedes Fenster die gleiche ist, daher benötigen wir diesen leicht anderen Ansatz:

#!/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

verwandte Informationen