>

이상한 문제가 발생했습니다. git 명령의 출력을 구문 분석하려고합니다. 명령 행에서 git 명령을 실행하면 예상대로 작동합니다 :

$ git log --oneline 32004f
32004f9 (tag: This_is_a_tag,_too, tag: Tag_from_command_line, origin/Project_A, Project_A) Merged
65f6f61 More changes
925f619 (tag: This_is_a_tag) Pulled from remote
(etc.)

그러나 출력을 리디렉션하거나 파이프하려고하면 괄호 안의 내용이 사라집니다.

$ while read -r ; do echo $REPLY; done < <(git log --oneline 32004f)
32004f9 Merged
65f6f61 More changes
925f619 Pulled from remote

[편집 : echo 명령은 문제를 설명하기 위해 엄격하게 사용됩니다. 실제 스크립트는 결과를 파싱 및 처리를 위해 여러 변수로 분할합니다]]

$ git log --oneline 32004f | hexdump -C | head
00000000  33 32 30 30 34 66 39 20  4d 65 72 67 65 64 0a 36  |32004f9 Merged.6|
00000010  35 66 36 66 36 31 20 4d  6f 72 65 20 63 68 61 6e  |5f6f61 More chan|
00000020  67 65 73 0a 39 32 35 66  36 31 39 20 50 75 6c 6c  |ges.925f619 Pull|
00000030  65 64 20 66 72 6f 6d 20  72 65 6d 6f 74 65 0a 64  |ed from remote.d|

그러나 괄호로 묶은 빠른 셸 스크립트는 잘 작동합니다.

$ cat test.sh
#!/bin/bash
echo "32004f9  (HEAD -> Project_A, tag: This_is_a_tag,_too, tag: Tag_from_command_line, origin /Project_A) Merged"
$ while read -r ; do echo $REPLY; done < <(./test.sh)
32004f9 (HEAD -> Project_A, tag: This_is_a_tag,_too, tag: Tag_from_command_line, origin /Project_A) Merged

저리가 넘어졌다. 누구든지 이것으로 나를 도울 수 있습니까?

배쉬 버전 : GNU bash, 4.4.12 (3) -release (i686-pc-cygwin) 자식 버전 : 자식 버전 2.15.0

  • 답변 # 1

    와이즈 비즈 확인   --decorate 옵션 :

    와이즈 비즈 와이즈 비즈

         

    표시된 커밋의 참조 이름을 인쇄하십시오. 만약 git log  참조 이름 앞에

    접두사가 붙습니다. --no-decorate, --decorate[=short|full|auto|no]  그리고 short  인쇄되지 않습니다. 만약 refs/heads/  을 지정하면 전체 참조 이름 (접두사 포함)이 인쇄됩니다. refs/tags/  를 지정한 다음 출력이 터미널로 이동하는 경우 참조 이름이 짧은 것처럼 표시되고 그렇지 않으면 참조 이름이 표시되지 않습니다. 기본 옵션은 refs/remotes/ 입니다. .

    full 가있는 것 같습니다  자식 설정의 어딘가에 설정하십시오.

    레퍼런스 이름 (태그 포함)을 강제 실행하려면 다음을 지정하십시오.

    auto
    
    

    short

관련 자료

  • 이전 javascript - 스프레더 및 수집 연산자를 사용하여 Es6에서 다음을 달성하려면 어떻게해야합니까?
  • 다음 Javascript에서 두 변수의 숫자 값을 함께 추가하는 방법