한 명령의 출력을 다른 명령의 인수로 전달하는 방법

한 명령의 출력을 다른 명령의 인수로 전달하는 방법

비슷한 질문을 하신 분이 있는데, 초보자라 Unix문맥 상 답변이 명확하지 않습니다. 내가 원하는 것은 한 명령의 출력을 다른 명령에 매개변수로 전달하는 것입니다. 저는 소스 제어를 위해 git을 사용하고 세 가지 다른 분기에서 작업합니다.

커밋해야 할 때마다 브랜치를 확인한 다음 적절한 명령을 내려야 합니다.

git pull --rebase origin <branch-name>

git-rebase먼저 실행하기만 하면 되므로 별칭을 작성하고 싶습니다 git branch.

git 브랜치의 출력은 다음과 같습니다

experiment
*master
new feature

따라서 마스터 분기 외에 두 개의 분기가 있는 경우 모든 분기가 표시되고 현재 분기는 별표로 표시됩니다. 별표로 표시된 줄을 추출한 다음 그 출력을 위 명령에 전달하고 싶습니다.

또한 명령의 출력을 억제하고 싶습니다 git branch. 내가 이렇게 한 것은 전체 명령을 입력하기에는 너무 게을러서가 아니라 Unix bash의 강력한 기능에 대해 더 많이 배우고 싶었기 때문입니다. 그것으로부터 뭔가를 배우기를 바랍니다.

답변1

git branch먼저 출력을 사용 가능한 형식으로 변환 해야 합니다.

$ git branch
  experiment
* master
  new feature

$ git branch | awk '/^\* / { print $2 }'
master

이제 이를 매개변수로 사용하고 싶습니다.

$ git pull --rebase origin $(git branch | awk '/^\* / { print $2 }')

(또는 psusi의 답변과 같이 백틱을 사용할 수도 있습니다).

이것~해야 한다괜찮습니다. awk 명령은 항상 정확히 한 줄과 일치해야 하며 분기 이름에는 공백이 있을 수 없다고 가정합니다. 더 복잡한 경우에는 이를 함수(또는 스크립트)로 래핑하여 중간 값에 대한 온전한 검사를 수행할 수 있습니다.

답변2

게다가xargs주문하다.

xargs - build and execute command lines from standard input

따라서 위의 @Useless의 답변은 다음과 같이 번역됩니다.

git branch | sed -ne 's/\*//p' | xargs git pull --rebase origin

답변3

여러 가지 방법이 있습니다. 가장 간단한 방법은 백틱 교체입니다.

git pull --rebase origin `git branch | sed -ne 's/\*//p'`

관련 정보