현재 디스플레이 색상과 형식을 백업하여 일부 사용자 정의 색상을 반영한 다음 이전 상태로 재설정할 수 있는 방법이 있습니까?
예를 들어:
echo -e '\e[31m'123; echo 456
이것도 123
빨간색으로 표시 됩니다 456
.
다음과 같이 표시 색상과 형식을 쉽게 재설정할 수 있습니다.
echo -e '\e[31m'123'\033[0m'; echo 456
하지만 난 그러고 싶지 않아초기화하지만 보여줘다시 덮다제가 바뀌기 전의 모습이에요.
여기에 문제가 있습니다. 더 큰 문자열 내의 어딘가에 임의의 문자열을 에코하고 싶습니다. 그러나 출력 재설정을 위해 제공한 예에서는 기존 형식이 없다고 가정합니다.
내 쉘 환경은 Bash이고 xterm-256color 호환 터미널 에뮬레이터를 사용합니다.
답변1
표시된 (ANSI 규격) 예의 경우,
tput op
이 추가 단계는 256색 기능을 사용하여 색상 팔레트를 변경하는 경우 도움이 됩니다.
tput oc
전자는 색상 쌍을 나타냅니다(curses 애플리케이션의 기능으로, 터미널 설명이 작성되었습니다. bash는 이 활동에 참여하지 않지만 결과를 사용할 수 있습니다). 후자는 원래 색상(팔레트를 변경하기 전)을 나타냅니다.
터미널 설명에서 이는 빌딩 블록으로 제공됩니다. 예를 들면 다음과 같습니다.xterm+256color
:
xterm+256color|xterm 256-color feature,
ccc,
colors#0x100, pairs#0x10000,
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*
%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
oc=\E]104\007,
setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;
5;%p1%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5
;%p1%d%;m,
setb@, setf@,
그리고xterm-basic
:
xterm-basic|modern xterm terminal emulator - common,
OTbs, am, bce, km, mir, msgr, xenl, AX, XT,
colors#8, cols#80, it#8, lines#24, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
el1=\E[1K, flash=\E[?5h$<100/>\E[?5l, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\n, invis=\E[8m,
is2=\E[!p\E[?3;4l\E[4l\E>, kmous=\E[M, meml=\El,
memu=\Em, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM,
rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>,
rmm=\E[?1034l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec,
rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;
%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
sgr0=\E(B\E[m, smacs=\E(0, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, vpa=\E[%i%p1%dd, E3=\E[3J, use=ecma+italics,
use=ansi+pp, use=xterm+kbs, use=xterm+alt+title,
use=ansi+enq,
꽤 깁니다. 예를 들어 색상 기능을 새로운 구성 요소로 분할할 수 있지만 xterm+color
아직은 그렇게 할 필요가 없습니다. xterm "호환" 터미널을 사용하는 경우 다음과 같이 더 적절한 다른 터미널 설명이 있습니다.ncurses FAQ. 그 중 대부분은 궁극적으로 다음에서 비롯됩니다.klone+color
.
색상 설정을 저장하려면 스크립트를 작성하여 이 정보를 얻을 수 있습니다. 몇 개 있어요샘플 스크립트xterm
소스 에서 . 이들 중 일부는 xterm "호환" 터미널과 함께 사용됩니다. "ANSI 호환" 색상에 대한 쿼리 기능을 시연하려면 다음을 사용합니다.dynamic.sh
(ymmv: 일부 터미널은 다른 터미널과의 xterm 호환성이 좋지 않습니다.
답변2
변수에 저장하세요.
red='\e[31m'
reset='\033[0m'
printf '%b %b' "$red"123 "$reset"456