나는 bash 스크립트를 작성 중입니다. Git 저장소의 모든 브랜치를 가져오는 일련의 파이프라인이 있습니다.
git ls-remote $1 'refs/heads/*' \
| rev \
| cut -d'/' -f1 \
| rev \
| if [ -z $2 ]
then
echo {}
else
echo {} > $2
fi
현재 if 문 부분이 제대로 작동하지 않습니다. {}
이 작업을 수행하려면 무엇을 교체해야 합니까 ?
답변1
표준 입력을 표준 출력으로 복사하려면 cat
대신 를 사용하십시오 echo
.
git ls-remote "$1" 'refs/heads/*' |
sed 's~.*/~~' |
if [ -z "$2" ]
then
cat
else
cat > "$2"
fi
또한 백슬래시를 피할 수 있도록 따옴표를 올바르게 사용하고 파이프를 배치해야 합니다. 사용은 매우 사소한 최적화이지만 sed
double을 둘러싸는 것보다 더 깔끔하다고 생각합니다(grok 정규식이 있는 경우). 사용할 수도 있습니다(그러나 이를 위해서는 Awk를 알아야 합니다).rev
cut
awk -F/ '{ print $NF }'
cat
이렇게 하면 이를 방지 할 수 있습니다 .
${2+exec >"$2"}
git ls-remote "$1" | sed 's~.*/~~'
[ -z
(빈 문자열을 두 번째 인수로 전달하는 경우 실패는 설정되지 않은 값과 null 값을 구별할 수 없기 때문에 반드시 더 유용하지는 않더라도 최소한 with보다 더 명시적이어야 합니다 .)
답변2
읽으려고 하므로 {}
사용하려는 구문을 대체할 수 있습니다 .cat
stdin
git ls-remote $1 'refs/heads/*' \
| rev \
| cut -d'/' -f1 \
| rev \
| if [ -z $2 ]
then
cat
else
cat > $2
fi
고쳐 쓰다: 서브쉘이 필요하지 않습니다. 감사합니다.@삼루타.