항상 하나의 명령을 다른 명령으로 파이프하십시오.

항상 하나의 명령을 다른 명령으로 파이프하십시오.

다음을 어떻게 수행합니까?

명령이 다음과 같은 경우

git show ..... 

그런 다음 실행

git show ..... | bat -l rs

내 말은, | bat -l rs실행하기 전에 명령 끝에 추가하라는 뜻입니다.

답변1

#!/bin/bash

case "$1" in
   show) git "$@" | bat -l rs ;;
   *) git "$@" ;;
esac

그런 다음 이 스크립트의 별칭 을 git.git show\git

또는 셸 함수를 정의하고 를 사용하여 command이를 셸 rc 파일에 추가합니다( bash-syntax).

git() {
case "$1" in
   show) command git "$@" | bat -l rs ;;
   *) command git "$@" ;;
esac
}

답변2

기본 명령을 재정의하면 git스크립트 등에 큰 피해를 줄 수 있습니다. 이는 git 별칭이 기존 명령을 숨기는 것과 같은 이유입니다.조용히 무시당함.

그러나 스크립트를 다음과 같이 정의하면새로운git 하위 명령 이름을 지정하면 git-somethinggit이 자동으로 선택합니다. 예를 들어 다음 내용이 포함 git-myshow된 실행 파일을 어딘가에 생성합니다 .PATH

#!/bin/sh

git show "$@" | bat -l rs

git myshow <any show arguments>하위 명령의 이름 은 git show <any show arguments> | bat -l rs스크립트 이름( git-showit == git showit등)에 따라 달라지므로 기존 하위 명령과 다른 한 원하는 이름을 선택할 수 있습니다 .

답변3

Git 하위 명령에 대한 다양한 호출기

Git을 사용하도록 구성할 수 있습니다.다른 하위 명령은 다른 호출기를 사용합니다.. 특별히 다른 Git 명령을 사용하고 싶지만 사용하지 않으려는 경우 bat -l rs:git show

git config pager.show 'bat -l rs'

또는 동등하게 다음을 에 입력하십시오 ~/.gitconfig.

[pager]
show = bat -l rs

환경 변수를 설정하면 GIT_PAGER모든 Git 하위 명령에 적용됩니다.

새로운 Git 하위 명령 정의

Git 자체에는 별칭 시스템이 있습니다. 기본 제공 명령을 재정의할 수는 없지만 직접 정의할 수는 있습니다. 예를 들어, 이것을 make에 넣으면 ~/.gitconfigBat를 통과한다는 점을 제외하면 동일합니다 git sb.git show

[alias]
sb = ! "f () { git show \"$@\" | bat -l rs; }; f"

git sb실패 하더라도 git show0이 반환된다는 점에 유의하세요 . 이를 방지하려면 bash 또는 zsh와 같은 다른 셸을 사용해야 합니다.

[alias]
sb = ! "zsh -c 'setopt pipe_fail; f () { git show \"$@\" | bat -l rs; }; f'"

쉘에서 명령 구문 분석

이는 Git의 내장 기능에 비해 특별히 편리하지는 않지만 수행할 수 있습니다. 호출된 함수를 정의 git하고 해당 인수를 구문 분석하도록 합니다. 이는 매우 유연할 수 있지만 첫 번째 단계는 Git 명령줄을 구문 분석하는 것입니다. 첫 번째인지 확인하기 쉽습니다.토론show, 하지만 첫 번째 항목을 확인하기가 더 어렵습니다.옵션이 아닌 인수show. 형식이 git --help너무 많이 변경되지 않는다고 가정하고 이를 수행하는 함수는 다음과 같습니다 .

git () {
  emulate -L zsh
  setopt pipe_fail
  local -A options_with_argument
  options_with_argument=()
  help="${$(command git --help)%%$'\n\n'*}"
  while [[ $help =~ \\[(-[A-Za-z0-9]\ \<|--[-A-Za-z0-9]+=) ]]; do
    local option=${${MATCH%%[= ]*}#'['}
    options_with_argument[$option]=1
    help=${help:$MEND}
  done
  local i=1
  while [[ $@[$i] = -* ]]; do
    if [[ -v options_with_argument[$@[$i]] ]]; then ((++i)); fi
    ((++i))
  done
  case $@[$i] in
    show) command git "$@" | bat -r ls;;
    *) command git "$@";;
  esac
}

답변4

아마도 이를 수행하기 위해 쉘 함수를 작성할 수 있습니다.

git-show() {
     git show $1 | bat -l rs
}

이를 쉘 구성에 추가하고 실행하면 git-show(대신 git show) 원하는 출력을 얻을 수 있습니다.

관련 정보