동일한 화면을 반복하는 스크립트 만들기

동일한 화면을 반복하는 스크립트 만들기

내 스크립트에 간단한 문제가 있습니다. 동일한 화면에 줄 스크립트를 표시하고 위의 마지막 정보를 표시하지 않아야 합니다. 내 데모 코드를 참조하세요.

#!/bin/bash

if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
#result=`sensors -A`
count=0
keypress=''
echo -ne "linha 1\nLinha 2\n " > /tmp/temp_script.log
while [ "x$keypress" = "x" ]; do    
  clear  
  let "count++" 
  output="$(cat /tmp/temp_script.log)"
  printf  "$output"\\b
  echo -en $count\\n
  sleep 1 
keypress="`cat -v`"
done
if [ -t 0 ]; then stty sane; fi
exit 0

결과 코드:

현재 코드

첫 번째 예의 여러 줄을 생성하지 않고 두 번째 예와 같이 관련 정보의 루프만 표시하는 방식으로 이 정보를 표시해야 합니다.

어떻게 해야 하나요?

내 목표

등등, 터미널에는 이전 루프의 느낌이 없고 지금 인쇄되고 있는 내용만 남게 됩니다.

답변1

가설clear화면을 정말로 지우면 표시된 스크립트 자체가 첫 번째 스크린샷을 생성하지 않습니다. 추가 프로세스가 연결되어 있으면 /tmp/temp_script.log몇 가지 작업을 수행할 수 있습니다.

반면에 터미널에서 화면이 지워지지 않으면 이는 문제의 일부입니다. 해당 색상 선은 스크립트를 실행하라는 메시지일 수 있으며 화면 상단에 유지하고 싶을 수도 있습니다.

  • TERM일반적으로 터미널 설명에 해당하는 적절한 값을 설정합니다 .
  • "적절한" 터미널 설명은 화면을 지우는 방법을 알려줍니다.
  • 부작용으로 (관습에 따라) 화면을 지우면 커서가 화면의 왼쪽 상단으로 이동하지만,
  • 화면의 왼쪽 상단에서 화면을 지우면 컬러 라인도 지워집니다.가능한유지하고 싶다)
  • 두 번째 줄에서 지우려면 (대부분의 터미널에서) 다음을 수행하십시오.
    printf '\033[2H\033[J''

또는

    출력 컵 1 0
    입력 편집
  • 하지만 처음에 메시지가 화면 상단에 표시되지 않으면 아무 것도 남지 않는다는 점을 기억하세요.예전에는화면 상단은 터치되지 않습니다.

문제의 또 다른 부분은 이 세 줄이 반복적으로 인쇄되어 화면을 잡아당긴다는 것입니다. 카운터를 인쇄하려는 위치로 커서를 이동하도록 변경할 수 있습니다. 예를 들어 다음과 같습니다.

    printf '\033[4H'

또는

    배출 컵 3 0

모두 종합하면 스크립트는 다음과 같을 수 있습니다( printf사용자 및/또는 터미널 설명에 문제가 있는 것 같으므로 사용하세요).TERM

    #!/bin/bash

    if[-t 0]; then stty -echo -icanon -icrnl 시간 0분 0;fe
    #result=`센서-A`
    개수=0
    printf '\033[2H\033[J''
    버튼=''
    에코 "린하 1"
    에코 "린하 2"
    while [ "x$keypress" = "x" ];    
      "숫자++"로 놔두세요
      printf '\033[4H'
      에코 $count
      잠 1
      키="`cat-v`"
    완벽한
    [-t 0]이면 제정신입니다.
    0번 출구

추가 자료:

관련 정보