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 xterm
aqui, mas você pode alterar isso facilmente modificando a parte citada na segunda linha. --class xterm
é uma xdotool --search
opção que corresponde às janelas da xterm
classe window. Leia a seção “COMANDOS DE JANELA” deman xdotool
para 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 yourwindowsname
residente na área de trabalho 1
. --all
significa que ambas as condições devem ser atendidas (“e” lógico), o padrão tem --any
o significado oposto.
Quando estiver tudo pronto e o script gerar os comandos corretos, remova- echo
o para executar as kill
ações.
Acontece que para o KDE konsole
o 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