echo 명령에서 글꼴 변경

echo 명령에서 글꼴 변경

zsh 또는 bash에서 에코 출력의 글꼴 속성을 변경할 수 있습니까?

내가 원하는 것은 다음과 같습니다.

echo -n "This is the font: normal "
echo -n $font=italic "italic,"
echo -n $font=bold "bold,"
echo -n "and"
echo -n $font=small "small".

그래서 다음과 같이 인쇄됩니다: "이것은 글꼴입니다: 일반,이탤릭체,용감한, 텍스트 한 줄 내에서 작은 ".

답변1

전부는 아니지만 대부분의 터미널 에뮬레이터에서는 다른 글꼴 크기나 다른 글꼴을 설정할 수 없으며 색상과 몇 가지 속성(굵게, 밑줄, 강조 표시)만 설정할 수 있습니다.

Bash (또는 zsh 또는 기타 쉘)에서는 터미널을 사용할 수 있습니다이스케이프 시퀀스직접적으로(일부 이국적인 터미널을 제외한 모든 터미널은 이제 xterm의 리드를 따릅니다). CSIESC [, $'\e['bash로 작성되었습니다. 속성 변경을 위한 이스케이프 시퀀스는 입니다 CSI Ps m.

echo $'\e[32;1mbold red\e[0mplain\e[4munderlined'

Zsh에는 하나가 있습니다편리한 기능그런 이유로.

autoload -U colors
colors
echo $bold_color$fg[red]bold red${reset_color}plain$'\e['$color[underline]munderlined

또는 다음과 같이 사용할 수 있습니다.급속한 확장, 또한 사용 print -P되거나% 매개변수 확장 플래그:

print -P '%F{red}%Bbold%b red%f %Uunderline%u'

답변2

스크립트나 소스 파일에 이러한 색상 정의를 포함할 수 있습니다. 다음과 같이 보일 수도 있습니다.

#!/bin/bash
PATH=/bin:/usr/bin:

NONE='\033[00m'
RED='\033[01;31m'
GREEN='\033[01;32m'
YELLOW='\033[01;33m'
PURPLE='\033[01;35m'
CYAN='\033[01;36m'
WHITE='\033[01;37m'
BOLD='\033[1m'
UNDERLINE='\033[4m'

echo -e "This text is ${RED}red${NONE} and ${GREEN}green${NONE} and ${BOLD}bold${NONE} and ${UNDERLINE}underlined${NONE}."

tput sgr0

각 변경 호출 후에 ANSI 색상 코드를 재설정해야 합니다. tput sgr0터미널에서 변경한 모든 내용을 재설정합니다 .

글꼴 크기나 이탤릭체를 변경하는 것은 사용 중인 터미널에 따라 다를 것이라고 생각합니다.

비록 이것이가이드특히 Bash 프롬프트를 사용자 정의하는 경우 색상 코드에 대한 좋은 참조가 되며 수행할 수 있는 작업에 대한 몇 가지 아이디어를 생성합니다.

답변3

레이아웃에서 [0x1b]선행 문자를 처리할 수 없는 것 같습니다 [.

첫 번째 줄은 굵게 표시됩니다.

 echo -e "\x1b[1m bold"
     echo -e "\x1b[30m black"
     echo -e "\x1b[31m red"
     echo -e "\x1b[32m green"
     echo -e "\x1b[33m yellow"
     echo -e "\x1b[34m blue"
     echo -e "\x1b[35m mag"
     echo -e "\x1b[36m cyan"
     echo -e "\x1b[37m white"   

일반적인 유형에 대해서는 나만 알고 있습니다.

echo -e "\x1b[0m io-std"
echo -e "\x1b[1m bold"
echo -e "\x1b[2m normal"

그리고 댓글로 manatwork와 GypsyCosmonaut에게 감사드립니다.

echo -e "\x1b[3m italic"
echo -e "\x1b[4m underlined"
echo -e "\x1b[5m blinking"
echo -e "\x1b[7m inverted"

그리고 io-std와 일반의 차이점을 모릅니다.

쉘에서 이탤릭체나 트럼펫을 본 적이 없습니다.

Ctrl +(manatwork 덕분에)를 통해 Bash에 입력할 수 v ESC 있으며 ^[. 이는 전체 ANSI 시퀀스가 ^[[1m bold​​또는 ^[[1mbold("굵게" 앞의 공백을 피하기 위해)처럼 보일 것임을 의미합니다.

많은 편집자들이 (char)0x1b에 문제가 있습니다. 대안: 어딘가에서 복사/붙여넣기 또는 사용

echo -e "\x1b[1m bold"

Bash 또는 16진수 편집기에서.

또는 더 간단하게:

echo -e "\e[1m bold"

이것은 \eASCII 코드 27, bash 내부 echo 명령 및 외부 프로그램 GNU-echo에 대한 이스케이프 시퀀스입니다.

답변4

여기:

http://en.wikipedia.org/wiki/ANSI_escape_code

(참고: 이들 중 대부분은 일반적으로 작동하지 않지만 대부분은 그렇게 표시되어 있습니다.)

저는 터미널에서 게임을 만들고 있는데 위의 링크에 크게 의존해 왔습니다. 커서 숨기기/숨기기 해제, 색상 설정(30), "굵게"(더 밝게), 더 어둡게, 밑줄, 기울임꼴, 배경색(30 대신 40) 등을 알려주는 방법도 있습니다. 커서의 위치를 ​​변경할 수도 있습니다. 이는 매우 유용합니다. 예를 들어 "\x1B[1A"커서를 한 행 위로 이동하고 "\x1B[0;0H"커서를 행 0, 열 0으로 이동하여 화면을 지웁니다 "\x1B[2J"."\x1B[2K"

사람들이 말했듯이 귀하의 목적을 위해:

echo -e "\x1b[30;44m black with blue background \x1b[m"
echo -e "\x1b[31;42m red with green background \x1b[m"
echo -e "\x1b[32;40m green with black background \x1b[m"
echo -e "\x1b[8m Invisible; na na na na boo boo \x1b[m"

노트:필요존재하다 -e:

에코-이자형"\x1b[35;1m 밝은 보라색\x1b[m"

아니면 작은따옴표를 사용해야 합니다. 이유를 보려면 입력하세요 man echo(큰 따옴표는 인쇄할 때 종종 고통스럽습니다. 확장되지 않거나 ANSI 이스케이프 시퀀스가 ​​필요하지 않은 것이 필요할 때 작은 따옴표를 사용하는 이유는 쉽기 때문입니다. - 비록 이 작업을 여러 번 수행하는 데 익숙하더라도 - 잊어버렸습니다. -e이 경우에는 " box with numbers and letters[35;1m")이 표시됩니다.

볼 때마다 (또는 또는 ) CSI로 바꾸십시오 . 나는 그것이 더 표준적이라고 생각하지만 그들 사이의 차이점이 무엇인지 실제로 모르겠습니다."\x1b[""\e[""\u1b[""\x1b["

관련 정보