programing

"git status"가 터미널에 색상을 출력하도록 강제합니다 (스크립트 내부).

goodcopy 2021. 1. 19. 08:04
반응형

"git status"가 터미널에 색상을 출력하도록 강제합니다 (스크립트 내부).


편집하다:

색상을 파싱하는 것은 일반적으로 잘못된 생각이라고 추천하고 싶습니다.

내가 그것을 원했던 이유 중 일부는 그것을 구문 분석하고 내 자신의 스크립트 출력에 전달할 수 있기 때문입니다. 이건 ... 좋아요.하지만 도자기 나 그런 것들을 사용하고 색이있는 부분을 직접 다시 만드는 것이 더 합리적 일 것입니다!

원래 질문이 이어집니다.


내 스크립팅이 (지금까지) 색상 코드를 처리하기에 충분히 견고하기 때문에 색상을보고 싶습니다. 나는 여기서 곡물에 반대하는 것처럼 보이지만 솔직히 스크립트에서 이스케이프 코드와 같은 것을 구문 분석하는 것이 큰 문제인지 알지 못합니다. 색상이 대화 형 사용에 도움이된다면 수동으로 수행하는 것보다 더 많은 데이터를 수집하고 처리하는 스크립트 사용에 도움이되지 않는 이유는 무엇입니까? 색상이 더 중요 하지 않을까요 ?

어쨌든, 나는 git status출력물 을 뭉개는 깔끔한 작은 쉘 스크립트를 가지고 있으며 ,이 스크립트가 색상을 그대로 유지하도록 만들고 싶습니다 . 내 전역 git 구성이 설정되어 변경 및 추적되지 않은 파일 목록이 git 상태에서 색상으로 표시됩니다. 불행히도 내가 찾을 수있는 git diff색상을 강제하는 옵션이 없습니다 git status.

명확하게 말하면 이것이 문제입니다.

$ git status

완벽한 출력을 생성하지만 (내 스크립트에서 발췌)

git status | sed "s/^#/\x1b[34m#[0m/"

색상이있는 git status출력을 생성하지 않으며 여기에서 스크립트에서 출력의 여러 영역을 강조하는 데 도움이되므로 선행 해시 문자를 파란색으로 명시 적으로 변환하고 있음을 알 수 있습니다.

누구든지 색상을내는 방법을 알고 있습니까? "가짜 터미널"STDIN / STDOUT 파이프로 사용할 수있는 표준 프로그램이 있습니까? 사실 저는 pty 의사 터미널 도구를 작업 중이므로이 목적을 위해 확실히 사용할 수 있지만 다소 무거운 솔루션입니다 (빌드를 완료하지 않았기 때문에 아직 사용할 준비가되지 않았습니다).


git 구성 변경을 방지하려면 config 변수를 -c다음 과 함께 전달하여 현재 명령에 대해서만이 작업을 수행 할 수 있습니다 .

    git -c color.status=always status | less -REX

해당 변수는 status명령 전용입니다. 위해 diff, show그리고 log변수입니다 color.ui:

    git -c color.ui=always diff | less -REX

참고 -c가되어야 전에status 또는 diff인수, 그리고 후.


편집하다:

색상을 파싱하는 것은 일반적으로 잘못된 생각이라는 강력한 권장 사항을 만들고 싶습니다.

내가 그것을 원했던 이유 중 일부는 그것을 구문 분석하고 내 자신의 스크립트 출력에 전달할 수 있기 때문입니다. 이건 ... 좋아요.하지만 도자기 나 그런 것들을 사용하고 색이있는 부분을 직접 다시 만드는 것이 더 합리적 일 것입니다!

원래 대답은 다음과 같습니다.


나는 질문을하고 나서 정말 빠르게 답을 찾는다. 문제를 해결하기위한 더 나은 접근 방식을 공식화 할 수 있도록 충분히 오래 문제에 대해 생각하는 것과 관련이 있습니다. 어쨌든 이것에 대한 해결책은

git config color.status always

범용 솔루션은이 를 필요로하는 모든 프로그램이 터미널에 있다고 생각하도록 강제하는 expect것과 pty관련 되거나 관련이 있다고 생각합니다.


쉘 명령을 실행하는 git 별칭을 사용할 때 이와 동일한 문제가 발생했습니다. 분명히 git shell은 현재 환경에서 상속되지 않으므로 내 색상 설정에 대해 아무것도 모릅니다.

전역 git color ui 설정을 추가하는 것 외에도 사람들이 언급 한 1.8.x 버전에서 git이 기본적으로 사용하는 것처럼 색상을 사용하도록 지시해야하는 보조 명령 인 별칭을 아래와 같이 만들어이 문제를 해결했습니다.

[alias]
  ignored = !git ls-files -v|grep --color '^h'

이렇게하면 방금 명령을 실행 한 것처럼 별칭으로 실행할 때 동일한 색상이 지정된 출력이 생성됩니다.

sed의 경우이 다른 답변이 더 안정적으로 작동하는 것으로 보입니다 .tput을 사용하십시오. https://unix.stackexchange.com/a/45954

참조 URL : https://stackoverflow.com/questions/16073708/force-git-status-to-output-color-on-the-terminal-inside-a-script

반응형