명령줄에서 화면 절반 지우기

명령줄에서 화면 절반 지우기

터미널을 지우는 방법이 있나요? 그런데 프롬프트를 화면 상단에 두지 않고 중간에 두나요? clear기본적으로 모든 명령줄 매개변수가 무시되는 것 같습니다 .

이 작업을 수행할 수 있는 방법이 있을 것이라고 생각했지만 tput찾을 수 없습니다.

답변1

tput예를 들어 다음을 사용하여 커서를 화면의 특정 줄로 이동할 수 있습니다 .

tput cup 11 0

12행으로 이동합니다(값은 0부터 계산되기 시작합니다).

마찬가지로 tput이 기능을 사용하면 해당 위치부터 화면 끝까지 지울 수 있습니다 ed. 결합,

tput cup 11 0 && tput ed

어쩌면 그것이 당신이 원하는 것일 수도 있습니다.

화면의 중간 표시로 이동하려면 첫 번째 숫자가 반환됩니다.

stty size

(대부분의 시스템에서) 화면의 줄 수입니다. 다음을 명령에 추가하세요.

tput cup $(stty size|awk '{print int($1/2);}') 0 && tput ed

clear계획은 다음과 다릅니다 tput ed.

  • 커서를 다음으로 이동시킵니다.위치(왼쪽 상단) 및
  • 그 지점부터 화면 끝까지 클리어합니다.

참고: 일부 플랫폼에서는tput ed오래 전에 해결된 문제로 인해 작동하지 않을 수 있습니다. 이러한 경우curses/ncurses 구성을 업그레이드하면 문제가 해결됩니다.

답변2

인용하다답변

# Get ceiling eg: 7/2 = 4
ceiling_divide() {
  ceiling_result=$((($1+$2-1)/$2))
}

clear_rows() {
  POS=$1
  # Insert Empty Rows to push & preserve the content of screen
  for i in {1..$((LINES-POS-1))}; echo
  # Move to POS, after clearing content from POS to end of screen
  tput cup $((POS-1)) 0
}

# Clear quarter
alias ptop='ceiling_divide $LINES 4; clear_rows $ceiling_result'
# Clear half
alias pmid='ceiling_divide $LINES 2; clear_rows $ceiling_result'
# Clear 3/4th
alias pdown='ceiling_divide $((3*LINES)) 4; clear_rows $ceiling_result'

답변3

행 수가 홀수이면 tput cup전체 페이지가 지워집니다.
다음과 같이 작성하면 문제가 해결됩니다.

tput cup $(($(stty size|awk '{print $1}')/2)) 0 && tput ed

답변4

클리어에 관심이 있으신 분들은맨 아래화면의 절반만 유지하고 나머지는 유지하면 다음과 같이 작동합니다.

half=$(stty size | awk '{print int($1/2)-1;}'); for i in `seq ${half}`; do echo '' ; done && tput cup ${half} 0 && tput ed

편집: 명확히 하기 위해 다른 답변을 실행하면 seq $(stty size | cut -d' ' -f1)출력의 전반부가 남고 이 명령은 후반부(즉, 최신 출력)가 남습니다.

관련 정보