다음을 어떻게 수행합니까?
명령이 다음과 같은 경우
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-something
git이 자동으로 선택합니다. 예를 들어 다음 내용이 포함 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에 넣으면 ~/.gitconfig
Bat를 통과한다는 점을 제외하면 동일합니다 git sb
.git show
[alias]
sb = ! "f () { git show \"$@\" | bat -l rs; }; f"
git sb
실패 하더라도 git show
0이 반환된다는 점에 유의하세요 . 이를 방지하려면 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
) 원하는 출력을 얻을 수 있습니다.