기본 모듈이 창 이름을 출력하므로 현재 활성 창 클래스를 표시하는 사용자 정의 폴리바 모듈을 만들려고 합니다.
이 명령을 사용하여 창 클래스를 가져옵니다.
xprop -id $(xdotool getactivewindow) WM_CLASS
그리고 다음 출력을 얻습니다.
WM_CLASS(STRING) = "kitty", "kitty"
하지만 원하는 출력은 다음과 같습니다.
kitty
내가 어떻게 그걸 할 수 있지?
답변1
다음과 같은 상황에서 벗어날 수 있습니다.
xprop -id $(xdotool getactivewindow) WM_CLASS |
awk -F '"' '{print $2}'
그러나 또한 (더 간단하게):
xprop -id $(xdotool getactivewindow) WM_CLASS |
cut -d '"' -f 2
또는 (경고, 정규식이 일치하지 않으면 전체 입력이 인쇄됩니다)
xprop -id $(xdotool getactivewindow) WM_CLASS |
sed 's/^[^"]*"\([^"]*\)".*$/\1/'
또는 다시 sed를 실행하지만 좀 더 강력해졌습니다.
xprop -id $(xdotool getactivewindow) WM_CLASS |
sed -n 's/^[^"]*r"\([^"]*\)".*$/\1/p'
또는 grep을 사용하는 경우에도 (그다지 강력하지는 않지만) (GNU grep 및 Perl 정규 표현식만 사용):
xprop -id $(xdotool getactivewindow) WM_CLASS |
grep -Po '^[^"]*"\K[^"]*'
이게 네가 말하는거야?
즉, 첫 번째 따옴표 쌍 안에 있는 문자열을 추출하고, 그렇지 않으면 실패합니까?
답변2
xprop
$'...'
백슬래시, 제어 및 비ASCII 문자가 ANSI C \\
, \n
, \r
또는 표기법 \t
으로 표시되는 ksh93/zsh/bash의 인용과 매우 유사한 형식으로 문자열을 출력합니다 .\ooo
유일한 차이점은 큰따옴표로 묶여 있기 때문에 자체가 대신 "
로 렌더링되고 \"
으로 '
렌더링 되므로 해당 출력을 셸에서 평가하도록 변환하는 것이 그리 어렵지 않아야 한다는 것입니다 .'
\'
WM_CLASS=$'...'
xprop
그러나 16진수 값으로 출력하고 다음으로 변환하는 것이 훨씬 더 쉽고 안전합니다 $'\xHH...'
.
애플리케이션 이름( kitty
예제의 첫 번째 이름):
eval "$(
xprop -id "$(xdotool getactivewindow)" -notype 8x WM_CLASS |
sed 's/0x/\\x/g;s/[, ]//g;s/\\x0.*/'\''/;s/=/=$'\'/
)"
애플리케이션 클래스 이름( kitty
예제에서는 두 번째):
eval "$(
xprop -id "$(xdotool getactivewindow)" -notype 8x WM_CLASS |
sed 's/0x/\\x/g;s/[, ]//g;s/=.*\\x0\(.*\)\\x0/=$'"'\\1'/"
)"
둘 다 $WM_CLASS
쉘 변수를 설정합니다.
이는 속성에 포함된 바이트 값에 관계없이 작동합니다.
을 지원하는 쉘을 가정합니다 $'\xHH'
.
답변3
방법으로 시도했습니다.
xprop -id $(xdotool getactivewindow) WM_CLASS| awk '{gsub(/[","]/,"",$3);print $3}'
output
kitty
파이썬
"xprop -id $(xdotool getactivewindow) WM_CLASS" 명령의 출력은 변수 "a"에 저장됩니다.
#!/usr/bin/python
import re
a='"WM_CLASS(STRING) = "kitty", "kitty"'
b=a.split(' ')[2]
print b.replace('"','').replace(",","")