Como fechar todas as janelas de terminal abertas, exceto aquela que executa um script de shell

Como fechar todas as janelas de terminal abertas, exceto aquela que executa um script de shell

Gostaria de saber se é possível, ao iniciar um shell script, fechar todas as outras janelas abertas do console, sem fechar aquela que executa o shell script.

Estou usando o console 16.04 do Kubuntu.

Desde já, obrigado!

Responder1

Isso não funciona com Wayland!Se você estiver usando o Ubuntu 17.10 ou mais recente e não mudou para o Xorg no login, esta solução não é para você.

Para tarefas como esta que uso xdotool, pode ser necessário instalá-lo primeiro com:

sudo apt install xdotool

Aqui está meu roteiro:

#!/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 você não mencionou qual emulador de terminal você usa, escrevi o script xtermaqui, mas você pode alterar isso facilmente modificando a parte citada na segunda linha. --class xtermé uma xdotool --searchopção que corresponde às janelas da xtermclasse window. Leia a seção “COMANDOS DE JANELA” deman xdotoolpara conhecer essas opções, para testá-las use

xdotool getactivewindow getwindowpid

para obter o PID da janela do terminal ativo e

xdotool search YOUROPTIONS getwindowpid %@

para obter os PIDs de todas as janelas correspondentes YOUROPTIONS, por exemplo

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

para combinar todas as janelas com o nome yourwindowsnameresidente na área de trabalho 1. --allsignifica que ambas as condições devem ser atendidas (“e” lógico), o padrão tem --anyo significado oposto.

Quando estiver tudo pronto e o script gerar os comandos corretos, remova- echoo para executar as killações.


Acontece que para o KDE konsoleo PID relatado xdotoolé o mesmo para todas as janelas, então precisamos desta abordagem um pouco 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

informação relacionada