clear
Bash에서는 모든 화면 지우기 명령이라는 명령을 실행할 수 있습니다.
echo
화면에 원하는 내용을 인쇄할 수 있습니다 .
간단한 스크립트에서는 명령 실행 비율을 인쇄해야 하는 경우가 많습니다.
그래서 나는 다음과 같은 일을 할 수 있습니다 ...
echo "89%"
echo "90%"
echo "91%"
등..
내가 싫어하는 것은 화면이 전체 비율로 업데이트되는 것입니다...
89%
90%
91%
...
bash 또는 php echo로 에코하고 콘솔에 "마지막으로 인쇄된 문자를 제거하세요.."라고 알릴 수 있는 특별한 문자 조합(예: "\033[01;31m")이 있는지 궁금합니다.
다음과 같은 것을 사용하여 이를 수행하십시오: (php 예)
echo str_repeat($neg_character, strlen($last_percentage_update_string));
echo $new_percentage_update_string;
화면을 줄로 채우지 않고 이전 문자열의 정확한 위치에 새 문자열을 인쇄합니다.
그렇지 않은 경우에는 항상 bash 및 php 스크립트를 사용하여 다른 방식으로 동일한 작업을 수행할 수 있는 방법을 찾고 있습니다. (적어도 debian9 콘솔 및 php7을 사용하여 실제 작업 예제를 포함해 주세요.)
답변1
이를 수행하는 일반적인 방법은 개별 문자를 삭제하는 것이 아니라 캐리지 리턴( ) 문자를 사용하여 줄의 시작 부분으로 돌아가는 것입니다 \r
.
printf "89%%"; sleep 1; printf "\r90%%\n"
이렇게 해도 선이 지워지지 않으므로 필요한 경우 주의가 필요합니다. 간단한 옵션은 끝에 공백을 추가하거나 출력을 고정 너비로 만드는 것입니다(예: printf "%2d%%\n" 1
선행 공백 제공).
화면의 일부를 이동하고 지울 수 있는 터미널 탈출 기능이 있습니다.CSI 시퀀스, 그러나 터미널에 따라 다릅니다(VT100 이스케이프는 현재 모든 곳에서 실제로 지원되지만). 예를 들어
printf "89%%"; sleep 1; printf "\e[3D90%%\n"
␛[3D
세 문자를 왼쪽으로 이동하고 덮어쓰는 데 사용됩니다 ( printf
지원한다고 가정 \e
).
printf "89%% hello"; sleep 1; printf "\e[0E\e[K90%%\n"
␛[0E
현재 줄의 시작 부분으로 이동하고 ␛[K
줄 끝 부분까지 지우는 데 사용됩니다 (터미널이 이러한 시퀀스를 지원한다고 가정).
tput
printf
이러한 시퀀스에 액세스할 수 있는 터미널 독립적인 방법을 제공합니다 .
printf "89%%"; sleep 1; tput cub 3; tput el; printf "90%%\n"
현재 터미널에 맞는 문자 시퀀스를 사용하여 커서를 왼쪽( cub 3
)으로 세 번 이동하고 줄 끝( )까지 지웁니다 .el
printf "89%% hello"; sleep 1; tput hpa 0; tput el; printf "90%%\n"
커서를 가장 왼쪽 열( )로 이동 hpa 0
하고 줄 끝까지 지웁니다.
man terminfo
어떤 "함수 이름"을 사용해야 하는지 알려줄 것입니다 tput
.
(위 예제의 많은 세부 사항은 모든 출력이 동일한 라인에 있다고 가정합니다. 이는 완벽한 것은 아니며 다양한 접근 방식을 설명하기 위한 것입니다.)
PHP 스크립트의 유사한 화면 제어를 보려면 PECL을 확인하세요.ncurses
확장하다.