실행했는데 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
첫 번째 줄 이후 읽기를 멈추고 종료하기 때문에git
stderr는 깨진 파이프가 되어 더 많은 오류를 인쇄하면 결국 종료될 수 있습니다.
git
stderr 파이프를 파괴하지 않고 종료 상태를 유지하면서 첫 번째 줄만 얻으려면 다음을 수행할 수 있습니다.
Result=$(
set -o pipefail
git ... 2>&1 > /dev/null | sed '1!d'
)
변수의 내용을 인쇄하는 구문 printf '%s\n' "$var
은 가 아니라 입니다 . echo $var
typeset -p var
정의를 인쇄하려면 Korn과 유사한 쉘을 참조하세요 .