인사말의 색상이 변경되는 일부 축하 카드처럼 동적으로 색상을 계속 변경하는(지정된 시간 간격 유무에 관계없이) 콘솔에 색상 텍스트를 인쇄할 수 있는 방법이 있습니까?
다음을 사용하여 컬러 텍스트를 인쇄하는 방법을 알고 있습니다.
echo eg: echo -e "\e[1;34m Hi dude, Welcome to the Matrix \e[0m"
하지만 저는 이 텍스트의 색상이 계속 바뀌기를 원합니다.
실제로 가능합니까?
답변1
색상을 반복적으로 변경하는 지침이 있는 텍스트는 인쇄할 수 없습니다. 너할 수 있는다음과 같이 원본 텍스트 위에 다른 색상으로 텍스트를 작성합니다.
i=0
while true
do
echo -en "\r\e[1;3${i}mWelcome to the Matrix\e[0m"
i=$(((i+1)%8))
sleep 0.25
done
그러면 모든 밝은 색상이 순환하면서 초당 4번씩 변경됩니다. \r
커서를 줄의 시작 부분으로 다시 이동하는 캐리지 리턴 문자는 echo -n
출력 끝에서 개행 문자를 억제합니다.
이는 단일 라인과 출력의 마지막 라인에서만 작동합니다. 더 나아가기 위해 다른 이스케이프 세트를 사용할 수도 있습니다. \e[3A
커서를 세 줄 위로 이동한 다음 텍스트를 다시 작성할 수 있습니다.
i=0
while true
do
echo -e "\e[0;3$(((i+1)%8))mHello!\e[0m"
echo -e "\e[1;3${i}mWelcome to the Matrix\e[0m"
i=$(((i+1)%8))
sleep 0.25
echo -e "\e[3A"
done
이렇게 하면 두 줄이 서로 다른 색상으로 작성되며 둘 다 지속적으로 변경됩니다.
이것들은 모두ANSI 이스케이프 코드, 그리고 많이 있습니다. 자주 사용한다면 이런 라이브러리저주도움이 될 수도 있습니다.tput
또한 편리한 도구이며 원시 이스케이프 코드를 사용하는 것보다 이식성이 더 좋습니다. 원래 코드를 사용하면 B/C/D는 아래/오른쪽/왼쪽입니다.
따라서 끊임없이 변화하는 텍스트를 무한정 "그대로" 두는 것은 불가능합니다. 프로세스를 백그라운드에 두거나 그렇지 않은 경우 &
특정 텍스트 부분이 무기한 유지되도록 주의 깊게 허용할 수 있습니다. 커서를 올바른 위치로 이동하고 텍스트를 다시 쓴 다음 다시 이동할 수 있습니다. 최종 목표가 무엇인지에 따라 유용할 수 있는 예는 다음과 같습니다.Bash 프롬프트 하우투의 "시계" 데모. 와많은작업 및 공동 작업 터미널 에뮬레이터를 사용하면 텍스트를 적절하게 스크롤할 수 있는 충분한 정보를 얻을 수 있지만 실제로는 그럴 가치가 없습니다.
엄밀히 말하면 "백엔드"라고 부르는 곳에서 실행되는 "깜박임" 코드가 있다는 점에 유의해야 합니다. 기술적으로는 색상 변경이라고 가정합니다. <blink>
레이블 처럼 작동하며 종종 텍스트를 표시하거나 숨깁니다. 보편적으로 지원되지는 않습니다. Konsole, xterm, Linux 콘솔 및 Apple 터미널은 이를 구현하지만 다른 시스템은 일반적으로 구현하지 않습니다. 어쨌든 코드 5입니다.