색상이 지정된 텍스트를 에코하고 색상을 동적으로 변경합니다.

색상이 지정된 텍스트를 에코하고 색상을 동적으로 변경합니다.

인사말의 색상이 변경되는 일부 축하 카드처럼 동적으로 색상을 계속 변경하는(지정된 시간 간격 유무에 관계없이) 콘솔에 색상 텍스트를 인쇄할 수 있는 방법이 있습니까?

다음을 사용하여 컬러 텍스트를 인쇄하는 방법을 알고 있습니다.

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입니다.

관련 정보