대역폭 입력/출력을 인쇄하는 i3Blocks 스크립트(i3 WM 환경의 유틸리티 블록)를 수정하고 싶습니다. 특히 이 지시문의 출력 색상을 변경하고 싶습니다.
echo -n " $INLABEL"
색상으로 #9fbc00
무엇을 합니까 ? 감사해요
답변1
짧은 대답은 할 수 없다는 것입니다. 진정한 24비트 색상(RGB)은 허용되는 표준의 일부가 아니며 터미널이 이를 지원하는지 여부에 따라 문제가 되기 때문입니다. 터미널 팔레트에서 미리 정의된 색상을 사용해야 합니다.ANSI 3/4비트 컬러
즉, 일부 터미널은 실제 24비트 색상을 지원하며 대부분은 \033[48;2;r;g;bm
색상을 배경으로 4
설정하고 색상을 전경으로 정의하기 48
위해 변경할 수 있는 형식을 사용합니다. 3
(추가 정보)
문자 rg와 b는 10진수로 8자리 숫자를 나타내므로 printf "\033[38;2;159;188;0mhello
hello()는 원하는 색상으로 인쇄되지만 #9fbc00
명령을 실행하면 재설정되지 않으므로 터미널에 다시 이전으로 돌아가도록 지시해야 합니다. 원래 색상. 이렇게 하려면 다른 이스케이프 시퀀스를 사용해야 합니다.
\033[0m
이제 아시다시피 오류 없는 인쇄 Hello world!
방법 #9fbc00
은
printf "\033[38;2;159;188;0mHello world!\033[0m\n"
.
ps: echo는 이스케이프 코드를 좋아하지 않습니다. 형식을 지정하려면 printf를 사용하세요.
답변2
그림i3blocks 매뉴얼 페이지상태:
The standard output of the command line is used to update the block content.
Each non-empty line of the output will overwrite the corresponding property:
1. full_text
2. short_text
3. color
For example, this script sets the full_text in blue but no short_text:
echo "Here's my label"
echo
echo \#0000FF
따라서 스크립트가 세 줄을 인쇄하도록 하세요. 마지막 줄에는 색상 코드가 포함되어야 합니다.
물론 모든 스크립트 출력의 색상이 변경됩니다.