쉘 스크립트를 시작할 때 쉘 스크립트를 실행하는 콘솔 창을 닫지 않고 열려 있는 다른 모든 콘솔 창을 닫을 수 있는지 알고 싶습니다.
저는 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 --search
xterm
man 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