모달을 사용하면 0
다음과 같이 글꼴 색상과 배경색을 설정할 수 있습니다.
echo -e "\e[0;31;47m teststring \e[0m"
그런데 반대색을 배경색(제 생각에는 청록색)으로 사용하고 싶습니다. 그래서 저는 그 모드를 사용하고 싶습니다 7
(모드는 7
반대 배경을 갖게 됩니다). 하지만 항상 작동하는 것은 아닙니다.
누구든지 이 패턴을 사용하는 방법을 말해 줄 수 있나요?
답변1
\e[7m
역방향 비디오에 대한 코드입니다(자주 사용되는 경우도 있음).눈에 띄다모드) 대부분의 터미널에서. 하지만 그것이 하는 일은 배경색을 전경색으로 바꾸고 전경색을 배경색으로 바꾸는 것입니다. 이는 사진 네거티브와 같은 역 비디오가 아닙니다.
사진 네거티브의 경우 일부 터미널은 다음을 지원합니다.
\e[38;2;RED;GREEN;BLUEm # for foreground
\e[48;2;RED;GREEN;BLUEm # for background
이스케이프 시퀀스입니다. 여기서 는 0에서 255까지의 십진수 입니다 RED
. 이는 터미널이 RGB 사양에 가장 가까운 팔레트의 색상을 선택하도록 지시합니다.GREEN
BLUE
그래서 당신은 이것을 할 수 있습니다 :
straight_color() {
printf '\33[48;2;%s;%s;%sm\33[38;2;%s;%s;%sm' "$@"
}
negative_color() {
for c do
set -- "$@" "$((255 - c))"
shift
done
straightcolor "$@"
}
예를 들면 다음과 같습니다.
straight_color 255 0 0 255 255 255
밝은 빨간색 배경에 밝은 흰색 전경의 경우:
negative_color 255 0 0 255 255 255
음수입니다(밝은 청록색 바탕에 검정색).
답변2
위키페이지를 주의 깊게 읽어보세요ANSI 이스케이프 코드\e[46m
; 등을 사용할 수 있습니다.
답변3
이 문제를 해결하는 가장 좋은 방법은 terminfo
라이브러리를 사용하는 것입니다. 이는 이스케이프 코드를 기억하는 것보다 훨씬 쉽고 일반적으로 오류가 발생할 가능성이 적습니다. (또한 터미널 독립적이지만 요즘에는 ANSI가 아닌 터미널 장치를 사용하지 않을 것 같습니다.)
# Use reversed colours
tput smso
echo hello, world
tput rmso
아래와 같이 프로그래밍 방식으로 코드를 변수에 넣을 수도 있습니다.
smso=$(tput smso)
rmso=$(tput rmso)
echo "${smso}Hello again${rmso}"
색상 컨트롤, 사용 tput setf {colour}
및 tput setb {colour}
. ("색상 처리"를 검색하십시오 man terminfo
.) 이것은 더 복잡하므로 작은 스크립트를 사용하여 처리하는 경향이 있습니다.
colour blue yellow
echo this is blue on yellow
이게 스크립트야
#!/bin/sh
#
# Take a pair of colours and set the foreground and background,
# respectively.
#
########################################################################
#
NULL=/dev/null
fg="$1"
bg="$2"
########################################################################
# Translate a colour name to the corresponding ANSI index value
#
colourNo ()
{
case "$1" in
black|0) echo 0 ;;
blue|1) echo 1 ;;
green|2) echo 2 ;;
cyan|3) echo 3 ;;
red|4) echo 4 ;;
magenta|5) echo 5 ;;
yellow|6) echo 6 ;;
white|7) echo 7 ;;
esac
return
}
########################################################################
# Go
#
if test "X$1" = 'X-?'
then
progname=`basename "$0"`
echo "Usage: $progname [<fg_colour>|- [bg_colour]]" >&2
exit 1
fi
if test -n "$fg" -a "X$fg" != "X-"
then
colour=`colourNo "$fg"`
test -n "$colour" && tput setf "$colour"
fi
if test -n "$bg" -a "X$bg" != "X-"
then
colour=`colourNo "$bg"`
test -n "$colour" && tput setb "$colour"
fi
exit 0