변수에서 git pull 명령의 출력을 캡처할 수 없습니다.

변수에서 git pull 명령의 출력을 캡처할 수 없습니다.

실행했는데 git -C /another-directory pull다음 오류가 발생했습니다.

구성이
원격에서 "refs/heads/main" 참조와 병합을 지정했지만 해당 참조를 얻지 못했습니다.

이제 변수에서 해당 응답을 얻고 싶습니다.

시험을 마친 read Result < <(git -C /another-directory pull)그런 다음 달렸 echo $Result는데 비어있었습니다.

나도 시도해 보았는데 git -C /another-directory pull | read Result여전히 비어 있었습니다.

어떡해?

답변1

이는 표준 출력이 아닌 표준 오류에 대한 출력입니다.

stdout 및 stderr을 캡처하려면 다음을 수행하십시오.

Result=$(git ... 2>&1)

stderr만 캡처하고 stdout을 삭제하려면 다음을 수행하세요.

Result=$(git ... 2>&1 > /dev/null)

stderr만 캡처하고 stdout은 유지합니다.

{ Result=$(git ... 2>&1 >&3 3>&-); } 3>&1

read명령이다단어를 읽어라~에서하나논리 행(물리적 행은 후행 백슬래시로 계속될 수 있음)

한 줄을 변수로 읽으려면,너는 사용한다IFS= read -r line.

따라서 표준 오류의 첫 번째 줄을 읽으려면 git다음을 수행할 수 있습니다.

IFS= read -r Result < <(git ... 2>&1 > /dev/null)

그러나 여기에는 몇 가지 단점이 있습니다.

  • 종료 상태가 손실됩니다 git. 성공 하면 read, 즉 명령이 전체 줄을 성공적으로 읽으면 명령이 성공합니다.
  • read첫 번째 줄 이후 읽기를 멈추고 종료하기 때문에 gitstderr는 깨진 파이프가 되어 더 많은 오류를 인쇄하면 결국 종료될 수 있습니다.

gitstderr 파이프를 파괴하지 않고 종료 상태를 유지하면서 첫 번째 줄만 얻으려면 다음을 수행할 수 있습니다.

Result=$(
  set -o pipefail
  git ... 2>&1 > /dev/null | sed '1!d'
)

변수의 내용을 인쇄하는 구문 printf '%s\n' "$var은 가 아니라 입니다 echo $var. typeset -p var정의를 인쇄하려면 Korn과 유사한 쉘을 참조하세요 .

관련 정보