컬을 사용하여 "암호화폐 뉴스" 스크립트를 만들려고 합니다. 지금까지는 작동하지만 예상한 대로는 아닙니다.
다음은 스크립트의 주요 부분에 대한 코드입니다.
curl -s https://www.coindesk.com/ \
| grep '<h3>\|datetime\|<p>' \
| sed "s/<h3>//;" \
| sed 's/timeauthor">//;' \
| cut -d '>' -f2 | cut -d '<' -f1 \
| head -46 \
| tail -39 \
| sed '3G;6G;9G;12G;15G;18G;21G;24G;27G;30G;33G;36G;39G'
읽기 쉽도록 제목과 시간이 포함된 행에 색상을 추가하려고 합니다. 이것은 어려운 것으로 판명되었습니다.
먼저 아래와 같이 색상 변수를 만들었습니다.
n=`echo -en "\e[0m"`
b=`echo -en "\e[1m"`
r=`echo -en "\e[31m"`
a=`echo -en "\e[36m"`
여러 가지 방법으로 스크립트에 추가하려고 시도했지만 지금까지는 성공하지 못했습니다.
예는 다음과 같습니다.
sed "s/<h3>/`echo "${r}${b}`/;" | sed 's/timeauthor">/`echo "${a}`/;'
색상을 표시할 수도 없습니다. 또 다른 문제는 가능하더라도 ${n} 변수를 추가하여 텍스트를 다시 정상적으로 만드는 방법을 잘 모르겠습니다...
스크립트의 전체 "작업" 버전:
#!/bin/bash
# Color variables
n=`echo -en "\e[0m"`
b=`echo -en "\e[1m"`
r=`echo -en "\e[31m"`
a=`echo -en "\e[36m"`
# Prints news from coindesk.com
curl -s https://www.coindesk.com/ | grep '<h3>\|datetime\|<p>' | sed "s/<h3>//;" | sed 's/timeauthor">//;' | cut -d '>' -f2 | cut -d '<' -f1 | head -46 | tail -39 | sed '3G;6G;9G;12G;15G;18G;21G;24G;27G;30G;33G;36G;39G'
저는 Linux를 처음 접했고 일주일 전부터 오늘부터 bash 스크립트를 작성하기 시작했습니다. 따라서 이것이 제가 하려는 작업을 수행하는 데 가장 적합한 솔루션이 아닐 수도 있습니다. 작동하는 부분조차 "지나치게 복잡"해 보였고 약간 엉성해 보였습니다. 특히 머리/꼬리 부분이 가장 마음에 들었습니다.
답변1
짧고 간단한 대답
tput setaf $COLOUR_CODE
컬러 출력을 생성하는 데 사용됩니다 . 8가지 기본 색상 사이에 속하는 정수 로 대체됩니다 $COLOUR_CODE
(각각 의 시퀀스에 매핑됨).1
8
\e[31m
\e[38m
따라서 스크립트의 경우:
# Color variables
n=`tput sgr0`
b=`tput bold`
r=`tput setaf 1`
a=`tput setaf 6`
자세한 설명
첫째, echo
이스케이프 시퀀스를 출력하는 데 사용하지 마십시오(예: ) "\e[31m"
. 명령은휴대용 열차 잔해이며 해당 -n -e
스위치는 보편적으로 지원되지 않습니다. 대신 사용하십시오 printf
:
printf '\e[31m'
\n
이는 및 다음 과 같은 다른 C 스타일 이스케이프에서도 작동합니다 \t
.
# Using Bash (Linux)
$ echo "foo\nbar"
foo\nbar
# Using Ksh (*BSD)
$ echo "foo\nbar"
foo
bar
둘째, ANSI 이스케이프 코드를 하드코딩하는 것은 컬러 출력을 생성하는 최선의 방법이 아닙니다. 이것tput(1)
이 목적을 위한 명령이 있습니다:
tput setaf 2 # Generates green text
tput bold # Generate bold text
tput sgr0 # Reset those fancy effects
# To use them as variables:
bold=$(tput bold)
green=$(tput setaf 2)
reset=$(tput sgr0)
echo "${bold}HEADING${reset}"
셋째, 컬러 터미널 출력이 시스템, 터미널 에뮬레이터 또는 하드웨어 간에 보편적이지 않다는 점을 이해하는 것이 중요합니다. tput
경우에 따라 사용하지 못할 수도 있으며 TTY 텍스트를 읽을 수 있도록 강조 표시에 의존하는 것은 나쁜 습관입니다.