bash에서 화면의 xy 좌표에서 문자를 읽는 방법이 있습니까? 이 명령은 다음과 유사합니다.
cget 12 30
그러면 12행, 30열의 문자가 반환됩니다.
답변1
텍스트 모드에서 콘솔 tty를 사용하는 경우( /dev/tty1
경유 /dev/tty7
) 해당 장치에서 직접 화면 버퍼를 읽을 수 있습니다 /dev/vcsN
.
실제로 한 줄에 80자가 있다고 가정하면 안 되므로 터미널에 각 줄의 문자를 표시하도록 요청해야 합니다. 그런 다음 (x,y) 좌표를 오프셋(y*c + x)으로 변환하는 간단한 수학을 통해 원하는 문자를 얻을 수 있습니다.
#!/bin/bash
#
my_tty=$(tty)
vcs_nr="${my_tty/*tty/}"
# Read Y, X from first two characters of /dev/vcsaN (we only use X)
xwidth=$(
dd if="/dev/vcsa$vcs_nr" bs=1c count=2 2>/dev/null |
od -t u1 -A d |
awk '{print $3; exit}'
)
# Calculate byte offset into the screen
offset=$(( ($2 -1) * xwidth + ($1 -1) ))
# Read the data
dd count=1 skip="$offset" bs=1 if="/dev/vcs$vcs_nr" 2>/dev/null
물론 이는 /dev/vcsN 장치에 대한 루트 액세스를 가정합니다.