이것은 컬러 텍스트를 인쇄하는 기능입니다.
cecho()
{
color=${1:-""} # defaults to original color if no color specified
colorreset="\E[0m" # back to black after function return
while read line; do
echo -e "$color$line$colorreset"
done
return
}
$ blue="\E[34m"
$ echo "message" | cecho $blue
$ message # it appears in blue
그러나 -n 옵션을 사용하면 아무것도 인쇄되지 않습니다.
$ echo -n "message" | cecho $blue
$
"-n" 옵션이 필요한 이유는 인쇄하는 텍스트에 전체 줄의 색상 단어만 포함되어 있기 때문입니다. 예를 들면 다음과 같습니다.
$ echo -n "this is "
$ echo "blue" | cecho $blue
답변1
귀하의 문제는 "읽기"가 입력을 읽으려면 줄 끝이 필요하다는 사실과 관련이 있다고 생각합니다. 따라서 일부 입력이 제공될 때까지(즉, 영원히) 정지됩니다.
어쩌면 cecho에 '-n' 옵션을 추가해야 할 수도 있습니다.
$ echo "message | cecho -n $blue
그런 다음 함수를 다시 작성하여 ''를 확인한 -n
다음 echo
내부에 적용하십시오 cecho
.
답변2
Michael의 대답은 read
읽고 있는 데이터의 끝에 개행 문자가 없기 때문에 아무것도 반환되지 않는다고 올바르게 명시하고 있습니다. while
다음과 같이 조건을 변경하면 이를 방지 할 수 있습니다 .
while read line || [ -n "$line" ];
답변3
원하는 것을 달성하기 위해 다음을 수행합니다.
#!/bin/bash
cecho()
{
color="${1:-""}"
colorreset=$(tput sgr0) # back to black after function return
while read line; do
if [[ ! -n $color ]]; then
printf '%s\n' "$line $colorreset"
else
printf '%s\n' "$1$line $colorreset"
fi
done
return
}
cecho "$1"