Como fechar todas as janelas abertas do terminal, exceto a que está executando um shell script

-1

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

Estou usando o Konsole 16.04 do Kubuntu.

Obrigado antecipadamente!

    
por MSO 14.11.2017 / 10:01

1 resposta

0

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

Para tarefas como esta, eu uso xdotool , você pode precisar instalá-lo primeiro com:

 
sudo apt install xdotool

Aqui está meu script:

#!/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, eu escrevi o script para xterm aqui, mas você pode facilmente mudar isso modificando a parte citada na segunda linha. --class xterm é uma opção xdotool --search que corresponde às janelas da classe de janela xterm . Leia a seção "COMANDOS DE JANELAS" de man xdotool para acessar saber sobre essas opções, para testá-los usar

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 a YOUROPTIONS , por exemplo

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

para corresponder a todas as janelas com o nome yourwindowsname residindo na área de trabalho 1 . --all significa que ambas as condições precisam ser atendidas ("e" lógicas), o padrão é --any com o significado oposto.

Quando você estiver pronto e o script exibir os comandos corretos, remova echo para executar as ações kill .

Acontece que para o konsole do KDE, o PID informado por xdotool é o mesmo para todas as janelas, então precisamos dessa 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
    
por dessert 14.11.2017 / 12:27