플랫폼, 데스크톱 환경 독립적인 방식으로 bash 스크립트에서 터미널 배경을 변경하시겠습니까?

플랫폼, 데스크톱 환경 독립적인 방식으로 bash 스크립트에서 터미널 배경을 변경하시겠습니까?

터미널 프로토콜만 사용하고 특정 터미널 프로그램이나 실행 중인 환경에 저장된 모든 구성("프로필"과 같은)에 의존하지 않는 방식으로 터미널 배경색을 어떻게 변경할 수 있습니까?

나는 터미널을 사용하여 컴퓨터에 로그인하고 스크립트를 실행하는 사람을 위해 터미널 배경색을 안정적으로 변경하는 스크립트를 작성할 수 있기를 원합니다.

"이것은 불가능하다"는 취지에 대한 빠르고 권위 있는 대답은 해결책으로서 높이 평가될 것입니다. 그러나 그러한 대답은 터미널 프로토콜을 철저하게 알고 그러한 기능이 없음을 증명할 수 있는 전문가만이 받아들일 수 있습니다.

답변1

이건 불가능 해. 저는 터미널 프로토콜을 완벽하게 아는 전문가는 아니지만 배경색을 변경할 수 있는 방법이 없는 터미널이 있다는 것을 알고 있습니다. 예를 들어 다음과 같은 멍청한 터미널의 경우입니다.예상하다또는 M-x shellEmacs에서. 이는 대부분의 하드웨어 단말기에도 해당되지만 요즘에는 이를 사용하는 사람이 거의 없습니다.

대부분의 터미널 에뮬레이터에는 배경색을 변경하는 방법이 있습니다. 터미널 에뮬레이터는 대체로 응용 프로그램과 터미널 사이의 인터페이스를 위해 xterm을 복사하므로 이와 같은 기능을 원할 경우 xterm 방식을 시도하고 일부 터미널 에뮬레이터에서는 작동하지 않을 것으로 기대하십시오. 찾아보세요xterm 제어 시퀀스원하는 것이 맞는지 확인하세요.

전체 터미널의 배경색을 변경하려면OSC 11; color BEL, 즉

printf '\e]11;%s\a' "$color"

이는 xterm, urxvt, gnome-terminal, konsole 및 lxterm에서는 작동하지만 rxvt, xfce4-terminal, terminator 또는 Emacs에서는 작동하지 않습니다 M-x term. 배경색 변경은 터미널 재설정 후에도 유지됩니다. 11;로 대체하여 전경색을 변경할 수도 있습니다 10;.

물론 기본 배경색입니다. 이 이스케이프 시퀀스를 지원하는 모든 터미널과 어떤 방식으로든 색상을 지원하는 대부분의 다른 터미널에서는 \e[41m(빨간색) 을 사용하여 이후에 표시되는 텍스트의 배경색을 전환할 수 있습니다 .

터미널에서 이스케이프 시퀀스가 ​​지원되지 않으면 알아낼 방법이 없습니다. 터미널을 쿼리하고 동일한 터미널 집합에서 지원되는 이스케이프 시퀀스를 찾아볼 수 있지만 일반적으로 그러한 시퀀스는 없습니다.

역방향 비디오로 전환하는 것은 \e[?5h아마도 대부분의 터미널에서 작동하지만 터미널 재설정 후에는 유지되지 않습니다. 그렇게 한 다음 전경색을 설정하면 대부분의 터미널에 시각적 효과가 나타납니다.

관련 정보