쉘 스크립트를 실행하는 창을 제외하고 열려 있는 모든 터미널 창을 닫는 방법

쉘 스크립트를 실행하는 창을 제외하고 열려 있는 모든 터미널 창을 닫는 방법

쉘 스크립트를 시작할 때 쉘 스크립트를 실행하는 콘솔 창을 닫지 않고 열려 있는 다른 모든 콘솔 창을 닫을 수 있는지 알고 싶습니다.

저는 Kubuntu의 16.04 konsole을 사용하고 있습니다.

미리 감사드립니다!

답변1

Wayland에서는 작동하지 않습니다!Ubuntu 17.10 이상을 사용하고 있고 로그인 시 Xorg를 사용하도록 변경하지 않은 경우 이 솔루션은 적합하지 않습니다.

내가 사용하는 이와 같은 작업의 경우 xdotool먼저 다음을 사용하여 설치해야 할 수도 있습니다.

sudo apt install xdotool

내 스크립트는 다음과 같습니다.

#!/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

어떤 터미널 에뮬레이터를 사용하는지 언급하지 않았으므로 xterm여기에 스크립트를 작성했지만 두 번째 줄에서 인용된 부분을 수정하여 쉽게 변경할 수 있습니다. 창 클래스 의 창과 일치하는 옵션 --class xterm입니다 . "창 명령" 섹션을 읽어보세요.xdotool --searchxtermman xdotool해당 옵션에 대해 알아보고 테스트하려면 다음을 사용하세요.

xdotool getactivewindow getwindowpid

활성 터미널 창의 PID를 얻으려면

xdotool search YOUROPTIONS getwindowpid %@

일치하는 모든 창의 PID를 얻으려면 YOUROPTIONS, 예를 들어

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

yourwindowsname데스크탑에 있는 이름과 모든 창을 일치시킵니다 1. --all이는 두 조건이 모두 충족되어야 함(논리적 "and")을 의미하며 기본값은 --any반대 의미입니다.

모든 설정이 완료되고 스크립트가 올바른 명령을 출력하면 echo해당 명령을 제거하여 kill작업을 수행하십시오.


KDE의 경우 konsole보고된 PID는 xdotool모든 창에서 동일하므로 약간 다른 접근 방식이 필요합니다.

#!/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

관련 정보