서브셸에서 명령을 실행하면 표준 출력을 변수로 수집할 수 있습니다. 예를 들면 다음과 같습니다.
var=$(echo 'hello world')
echo $var
예상대로 "hello world"를 인쇄합니다.
색상과 새 줄을 추가하는 경우에도 작동합니다.
var=$(echo "Text in \n\e[34mBlue")
echo -e $var
예상대로 "blue"라는 단어를 사용하여 다음 줄에 "blue text"를 인쇄합니다.
그러나 다음과 같은 git 출력을 사용하려고 하면
var=$(git status)
echo $var
모든 개행 문자와 색상이 손실됩니다.
bash에서 서식과 색상을 유지하면서 git 명령의 출력을 캡처하고 나중에 인쇄하는 방법은 무엇입니까?
답변1
기본값은 다음과 같습니다.자식 color.ui
구성is 는 auto
TTY로 출력할 때만 색상을 사용합니다. always
출력에 색상이 지정되도록 구성을 변경할 수 있습니다 .
귀하의 사용 사례에 가장 유용한 것은구성 값 재정의를 허용하는 -c
옵션git
현재 명령에만 적용됩니다. 이를 사용하여 color.ui
다음을 설정할 수 있습니다 always
.
var=$(git -c color.ui=always status)
printf '%s\n' "$var"
두 번째 예에서는
var=$(echo "Text in \n\e[34mBlue")
echo -e $var
실제로 echo -e
색상이 나타나는 줄입니다. 이스케이프 코드는 명령 대체에 의해 내부적으로 해석되지 않으며 echo
백슬래시 및 기타 문자가 실제로 존재합니다. 색상 코드가 당시에 저장되었다가 생성 당시 잊혀졌다는 의미는 아닙니다. git
한 경우에는 마지막에 생성되었지만 다른 경우에는 전혀 생성되지 않았습니다.
답변2
이 시도:
var=$(git status)
echo "$var"
이것은 bash 인용 메커니즘에 관한 것이며 주위 에는 ""
따옴표 가 없으며 내부는 처럼 토큰 구분 기호로 처리됩니다 .$var
newline
blank space
자세한 내용은 bash 매뉴얼을 참조하세요.