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 xterm
hier geschrieben, aber Sie können dies leicht ändern, indem Sie den zitierten Teil in der zweiten Zeile ändern. --class xterm
ist eine xdotool --search
Option, die Fenstern der xterm
Fensterklasse entspricht. Lesen Sie den Abschnitt „FENSTERBEFEHLE“ vonman xdotool
Um 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, yourwindowsname
die sich auf dem Desktop befinden 1
. --all
bedeutet, dass beide Bedingungen erfüllt sein müssen (logisches „und“), die Standardeinstellung ist --any
die umgekehrte Bedeutung.
Wenn Sie alles eingestellt haben und das Skript die richtigen Befehle ausgibt, entfernen Sie echo
es, um die kill
Aktionen auszuführen.
Es stellt sich heraus, dass für KDE konsole
die von gemeldete PID xdotool
fü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