Cómo cerrar todas las ventanas de terminal abiertas excepto la que ejecuta un script de shell

Cómo cerrar todas las ventanas de terminal abiertas excepto la que ejecuta un script de shell

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 xtermaquí, pero puedes cambiarlo fácilmente modificando la parte citada en la segunda línea. --class xtermes una xdotool --searchopción que coincide con ventanas de la xtermclase ventana. Lea la sección “COMANDOS DE VENTANA” deman xdotoolpara 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 yourwindowsnameque reside en el escritorio 1. --allsignifica que se deben cumplir ambas condiciones (“y” lógico), el valor predeterminado tiene --anyel significado opuesto.

Cuando esté todo listo y el script genere los comandos correctos, elimínelo echopara realizar las killacciones.


Resulta que para KDE konsoleel PID informado xdotooles 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

información relacionada