
stderr
명령의 출력에 색상을 지정 하는 다음 기능이 있습니다 .
red=`tput setaf 1`
colorerr() {
(trap 'tput sgr0' EXIT; eval "$* 2> >(echo -n \"${red}\"; cat -;)")
}
예를 들어:
colorerr "bash -c 'cd ${WEB_APP_DIR}; npm run-script build'"
스크립트는 set -e
, trap ... ERR
및 를 사용하여 trap ... EXIT
실패 시 줄 번호와 스택 추적을 보고합니다. 전달된 명령 문자열이 colorerr
실패하는 경우를 제외하면 모든 것이 잘 작동하며 오류를 포착하여 더 나은 보고서를 제공하고 싶습니다(함수 내에서 오류가 발생했다고 알려주는 것은 colorerr
소용이 없기 때문입니다).
표준 || ...
구성을 시도했지만 하위 쉘 내에서 오류가 colorerr
여전히 발생했습니다 ERR
trap
. 테스트로 다음을 시도했습니다.
(trap 'tput sgr0' EXIT; eval "$* 2> >(echo -n \"${red}\"; cat -;)") ||
true
그러나 ERR 트랩은 여전히 트리거됩니다. || true
평소와 같이 오류 코드가 "0"으로 설정되지 않는 이유는 무엇입니까 ?
답변1
실제로 답변은 아니지만 해결 방법입니다. 이 시도:
col-err() { "$@" 2> >(grep --color .) ; }
colorerr
구문은 질문의 함수 와 약간 다릅니다 . ~ 을 위해 col-err
, ~을 위해아니요실행할 명령을 인용하면 다음과 같습니다.
col-err bash -c 'cd ${WEB_APP_DIR}; npm run-script build'
어디서나 실행할 수 있는 예:
col-err bash -c 'ls $SHELL ${SHELL}_no_such ; echo
ls -l $HOME ${HOME}_no_such | head -2'
col-err
호출 로 인해 grep
변수와 함께 사용됩니다 $GREP_COLORS
. 색상을 녹색( ms=01;32
아래 첫 번째 색상)으로 한 번만 변경합니다.
GREP_COLORS='ms=01;32:mc=01;33:sl=:cx=:fn=35:ln=32:bn=32:se=36' \
col-err bash -c 'ls $SHELL ${SHELL}_no_such ; echo
ls -l $HOME ${HOME}_no_such | head -2'
참고: 색상 문자열은 다음에서 조정되었습니다.크리키스답변"다른 grep마다 다른 색상을 사용하십시오".