10분마다 명령줄에 노트북의 배터리 수명을 알려주는 스크립트를 작성했는데 문제는 이를 명령줄에 반영한다는 것입니다. 예를 들어 터미널의 오른쪽 상단에 인쇄하고 싶습니다.
그게 가능합니까?
예: 터미널 창은 다음과 같습니다.
=====================
|texttexttexttexttex|
|t |
|moretext |
|somethingsomething |
|me@me:~$... |
=====================
명령이 실행된 후 결과는 다음과 같습니다.
=====================
|texttexttextBAT-50%|
|t |
|moretext |
|somethingsomething |
|me@me:~$... |
=====================
그러면 거기에 쓰여진 내용을 덮어쓰게 됩니다.
답변1
사용터미널 이스케이프 시퀀스커서를 이동합니다. 거의 모든 터미널은 ANSI에서 표준화되고 VT100에서 대중화된 공통 이스케이프 시퀀스 세트를 사용합니다. 하지만 당신은 사용할 수 있습니다용어 정보이식성과 가독성이라는 두 가지 이점을 갖춘 터미널의 이스케이프 시퀀스를 찾는 데이터베이스입니다. 당신은 그것을 사용할 수 있습니다tput
방출 효과용어 정보 기능.
print_in_top_right () {
local columns=$(tput cols) # get the terminal width
local text=${1:0:$columns} # truncate the text to fit on a line if needed
tput sc # Save the Cursor position
tput cup 0 $((columns - ${#text})) # move the CUrsor Position to the top line, with just enough space for $text on the right
printf %s "$text"
tput rc # Restore the Cursor position saved by sc
}
터미널이 스크롤되면 이 텍스트도 함께 스크롤됩니다. 일부 텍스트를 터미널에 오버레이하는 범용 도구는 없습니다. 이 작업을 수행하려면 이 기능을 갖춘 터미널 에뮬레이터가 필요하며 일반적으로 이 목적을 위해 전용 회선을 예약합니다. 대부분의 그래픽 터미널 에뮬레이터에서는 창 제목을 볼 수 있습니다.xterm 호환 이스케이프 시퀀스 OSC 2
( OSC
예 ESC ]
).
set_window_title () {
printf '\e]2;%s\007' "$1"
}
답변2
터미널의 11행 31열에 MSG를 작성하고 창 하단에 쉘 프롬프트를 다시 넣으려면 다음을 수행하십시오.
echo "$( tput cup 10 30 )${MSG}$( tput cup ${LINES} 0))" && echo
답변3
이것은 당신에게 도움이 될 것입니다BATTERY=50
터미널의 열 번호를 찾은 다음 텍스트의 커서를 조정하고 "BAT $BATTERY%"를 인쇄합니다.
echo "$(tput cup 0 $(expr $(tput cols) - 7))BAT $BATTERY%" && echo