echo 명령에서 글꼴 변경


16

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

내가 원하는 것은 비슷한 것입니다.

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".

텍스트 라인 내에 "이 글꼴은 normal, italic , bold , small "입니다.


이것은 사용 된 쉘보다 문제의 터미널 에뮬레이터와 더 관련이 있습니다. 이 질문에 스레드는 내가 생각하는 몇 가지 중요한 포인터를 포함
sr_

일반적으로 글꼴 크기를 변경할 수 없습니다. 일반적으로 할 수있는 유일한 일은 색상을 변경하고 때로는 굵게 / 밑줄이있는 속성입니다. 이를 위해 ANSI 이스케이프 시퀀스를 사용할 수 있습니다. 예를 들어 bashguru.com/2010/01/shell-colors-colorizing-shell-scripts.html 을 참조하십시오 .
jofel

답변:


15

모든 터미널 에뮬레이터가 아닌 대부분의 경우 다른 글꼴 크기 나 다른 글꼴, 색상 및 몇 가지 속성 (굵게, 밑줄, 눈에 띄는) 만 설정할 수 없습니다.

bash (또는 zsh 또는 다른 쉘)에서는 터미널 이스케이프 시퀀스를 직접 사용할 수 있습니다 (몇몇 이국적인 것 외에도 모든 터미널은 요즘 xterm의 리드를 따릅니다). CSI은 bash로 ESC [작성 $'\e['되었습니다. 속성을 변경하기위한 이스케이프 시퀀스는 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

16

이러한 색상 정의를 스크립트 나 소스 파일에 포함시킬 수 있습니다. 이런 식으로 보일 수 있습니다.

#!/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 프롬프트 사용자 정의에 관한 것이지만 색상 코드에 대한 좋은 참고 자료이며 수행 할 수있는 작업에 대한 아이디어를 생성합니다.


5

레이아웃이의 [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"

그리고 의견에서, 감사의 작업과 집시 우주 비행사 :

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

io-std와 normal의 차이점을 모릅니다.

나는 껍질에서 기울임 꼴 또는 작게 보지 못했습니다.

Bash에서 Ctrl + v ESC 를 사용하여 입력 할 수 있습니다 (manatwork도 감사합니다) ^[. 이것은 전체 ANSI 시퀀스가 ^[[1m bold또는 ^[[1mbold( 'bold'앞의 공백을 피하기 위해) 보일 것임을 의미합니다 .

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

echo -e "\x1b[1m bold"

bash 또는 16 진 편집기에서.


1
이스케이프 문자 Ctrl + V, Esc와 같이 입력 할 수 있습니다. (“^ [”로 표시됩니다. 이는 전체 ANSI 시퀀스가“^ [[1mbold "와 유사 함을 의미합니다.)
manatwork

1
언급 할 속성이 더 있습니다 : \e[4m밑줄, \e[5m깜박임, \e[7m반전.
manatwork

@manatwork : 추가했습니다.
사용자가 알 수 없음

@userunknown 코드를 도와 주셔서 감사합니다. 기울임 꼴은 다음과 같습니다.echo -e "\x1b[3m italic"
GypsyCosmonaut

0

여기:

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

echo **-e** "\x1b[35;1m Light purple \x1b[m"

또는 작은 따옴표를 사용해야합니다. man echo이유를 보려면 입력 하십시오 (큰 따옴표는 일반적으로 인쇄 할 때 고통 스럽습니다. 확장 할 필요가 없거나 ANSI 이스케이프 시퀀스가 ​​필요할 때 작은 따옴표를 사용하기 쉽기 때문에 여러 번 사용하지 않아도 쉽게 사용할 수 있습니다) --e 를 잊어 버리면 " box with numbers and letters[35; 1m"가 표시됩니다.)

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


추가 문자로 문자열을 어지럽히고 싶다면 \ e :-)를 사용하지 마십시오
clearlight

@clearlight 나는 당신이 무슨 뜻인지 잘 모르겠습니다. "use \ e"라고 말했을 수도 있습니다. 그러나 내가 찾은 \e것보다 덜 지원 \x1b됩니다. 가장 좋은 방법은 esc=$'\e'또는 esc=$'\x1b'(이것은 bash에 있습니다) 그런 다음 "${esc}[34;1m"(예를 들어 밝은 파란색) 사용합니다. 실제 bash 프롬프트 문자열에 대한 반 복잡한 예제 ( github.com/dylnmc/ps1porn/blob/master/powerline.sh )가 있습니다. 그에 대한 archlinux-offtopic.
Dylan

그 이유 esc=$'\e'는 bash가 그 자리에서 anse-escape 문자를 생성하고 몇 가지 방법으로 이점을 얻을 수 있기 때문입니다. 때때로, 사실, (같은 GitHub의 링크에서 설명한다), 당신 제대로 표시 할 색상을 얻기 위해이 방법을 사용 할 수 있습니다. sh 쉘뿐만 아니라 이전 버전의 bash의 경우, 터미널이 대부분의 최신 터미널이 수행하는 이스케이프 시퀀스를 사용한다는 점을 감안할 때 색상을 표시하기 위해이 방법을 사용해야하지만 반드시 그럴 필요는 없습니다.
Dylan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.