Bash는 긴 PS4 문자열을 자릅니다.

Bash는 긴 PS4 문자열을 자릅니다.

여러 bash 스크립트를 호출하는 대규모 빌드 프로젝트를 디버깅하려고 합니다. 누군가 수정 제안을 PS4해서 스크립트 경로와 실행 중인 줄 번호가 출력되도록 다음과 같이 설정했습니다.

export PS4='\e[33m+ ${BASH_SOURCE}:${LINENO} \e[0m'

그런데 BASH_SOURCE길어지면 출력이 모두 노란색(때문에 \e[33m)으로 나오는 것을 확인했습니다. 추가 조사를 통해 길이가 80자를 초과할 때마다 bash가 잘리고 PS4이 경우에는 \e[0m실행되지 않는다는 것을 발견했습니다 . Google을 검색했지만 이 동작에 대한 문서를 찾을 수 없습니다.

현재 내 유일한 해결책은 수동으로 잘라내는 것입니다 BASH_SOURCE. 더 좋은 방법이 있나요?

export PS4='\e[33m+ ${BASH_SOURCE:${#BASH_SOURCE}<80?0:-80}:${LINENO} \e[0m'

관련 정보