내 스크립트에 한 가지 간단한 문제가 있습니다. 동일한 화면에 행 스크립트가 필요하고 위의 마지막 정보가 표시되지 않습니다. 내 데모 코드를 참조하세요.
#!/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번 출구
추가 자료: