bash 색상 에코: "-n" 옵션 문제

bash 색상 에코: "-n" 옵션 문제

이것은 컬러 텍스트를 인쇄하는 기능입니다.

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"

여기에 이미지 설명을 입력하세요.

관련 정보