Me gustaría saber si es posible, al iniciar un script de Shell, cerrar todas las demás ventanas abiertas de la consola, sin cerrar la que ejecuta el script de Shell.
Estoy usando la consola 16.04 de Kubuntu.
¡Gracias de antemano!
Respuesta1
¡Esto no funciona con Wayland!Si está utilizando Ubuntu 17.10 o posterior y no cambió a Xorg al iniciar sesión, esta solución no es para usted.
Para tareas como esta utilizo xdotool
, es posible que tengas que instalarlo primero con:
sudo apt install xdotool
Aquí está mi guión:
#!/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
Como no mencionaste qué emulador de terminal usas, escribí el script xterm
aquí, pero puedes cambiarlo fácilmente modificando la parte citada en la segunda línea. --class xterm
es una xdotool --search
opción que coincide con ventanas de la xterm
clase ventana. Lea la sección “COMANDOS DE VENTANA” deman xdotool
para conocer esas opciones, para probarlas use
xdotool getactivewindow getwindowpid
para obtener el PID de la ventana del terminal activo y
xdotool search YOUROPTIONS getwindowpid %@
para obtener los PID de todas las ventanas que coincidan YOUROPTIONS
, por ejemplo
xdotool search --all --name yourwindowsname --desktop 1 --class getwindowpid %@
para hacer coincidir todas las ventanas con el nombre yourwindowsname
que reside en el escritorio 1
. --all
significa que se deben cumplir ambas condiciones (“y” lógico), el valor predeterminado tiene --any
el significado opuesto.
Cuando esté todo listo y el script genere los comandos correctos, elimínelo echo
para realizar las kill
acciones.
Resulta que para KDE konsole
el PID informado xdotool
es el mismo para cada ventana, por lo que necesitamos este enfoque ligeramente diferente:
#!/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