대화식으로 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] 삭제
몇 마디 만하겠습니다