조건에 따라 Bash의 echo / printf에게 이스케이프 코드를 삼키도록 어떻게 알릴 수 있습니까?

0xC0000022L

대화식으로 cron작업 으로 실행되는 Bash 스크립트가 있습니다 . 대화식으로 실행하면 터미널에 컬러 텍스트를 출력합니다. 그러나 실행 cron하면 터미널이 없으므로 [1;31m출력에서 많이 유사합니다.

출력 장치가 지원하지 않는 경우 Bash에서 이스케이프 코드를 삼키도록 지시하는 방법이 있습니까?

이것은 bash가 상태 확인에 관한 색상인쇄 할 수 있는지 확인하는 방법 과 관련이 있습니다. 그러나 출력 장치에 따라 색상의 이중 기능을 호출 echo하거나 printf유지하면서 가능한 한 적게 변경하고 싶습니다 .

일하는 남자

정확히 삼키지는 않지만 매개 변수 확장으로 제거 할 수 있습니다.

str='Hello \e[31mc\e[32mo\e[33ml\e[34mo\e[35mr\e[m world'

# colorful output
echo -e "$str"

# colorless output    
echo -e "${str//\\e\[+([0-9;])m}"

위의는 bash필요 extglob에 설정되는 쉘 옵션을 선택합니다. ( shopt -s extglob)

사용하기 쉽도록 함수를 정의하십시오.

function ecco() { [ -t 1 ] && echo -e "$1" || echo -e "${1//\\e\[+([0-9;])m}"; }

그런 다음 호출하십시오.

ecco 'Hello \e[31mc\e[32mo\e[33ml\e[34mo\e[35mr\e[m world'

작동하는지 확인하려면 출력을 리디렉션하면 색상이 사라집니다.

ecco 'Hello \e[31mc\e[32mo\e[33ml\e[34mo\e[35mr\e[m world' | cat

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관