동일한 화면에서 반복되는 스크립트 만들기

동일한 화면에서 반복되는 스크립트 만들기

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

#!/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

    만약 [ -t 0 ]; 그런 다음 stty -echo -icanon -icrnl 시간 0분 0; fi
    #result=`센서 -A`
    개수=0
    printf '\033[2H\033[J'
    키 누르기=''
    에코 "린하 1"
    에코 "린하 2
    while [ "x$keypress" = "x" ]; 하다    
      "카운트++"하자
      printf '\033[4H'
      에코 $count
      잠 1
      keypress="`cat -v`"
    완료
    만약 [ -t 0 ]; 그렇다면 제정신이군요; fi
    0번 출구

추가 자료:

관련 정보