git branch
예를 들어 (항상 두 단어로) 명령이 있다고 가정 해 봅시다 .
내가 원하는 것은 인수 로이 명령이 실행될 때를 추적하는 것입니다. 예를 들어, git branch develop
오류없이 명령 을 실행하면 develop
파일 에 저장하고 싶습니다 .
내 git 명령을 .bash_profile
다음과 같이 덮어 쓰려고 했습니다.
git () {
if [ $# -eq 3 ]
then
git $@
echo $2 > /path/tacked_parameters.txt
else
git $@
fi
}
그러나 그것은 잘 작동하지 않는 것 같습니다. 이것을 할 수있는 방법이 있습니까?
답변
여기 몇 가지 문제가 있습니다.
- 당신의
git
기능을 대신 원래의 자신을 재귀 적으로 호출git
명령. - 당신이 사용하는
$@
어떤 이해가되지 않는 인용 부호가 무엇이든지 - 당신이있어 인용 부호가없는 다른 변수를 떠나 그들 glob에 분할 + 셸을 묻는.
- 당신이있어 사용하여
echo
임의의 데이터를 . - 원래
git
명령 의 종료 상태가 유실 됩니다. - 호출 할 때마다 로그 파일을 덮어 씁니다.
- 함수 정의는 사용자
~/.bash_profile
의 쉘이 아닌 로그인 세션을 사용자 정의하기위한 것이며 일반적으로 비 로그인bash
호출로 읽히지 않습니다 .
당신은 다음과 같은 것을 원할 것입니다 :
git() {
if [ "$#" -eq 3 ]
then
local ret
command git "$@"; ret=$?
printf '%s\n' "$2" >> /path/tacked_parameters.txt
return "$ret"
else
command git "$@"
fi
}
그건:
- 변수를 인용하고
- 사용
command
실행하는git
명령을 , - 종료 상태를
git
로컬 변수에 저장하고 종료시 반환 - 로그 파일로 리디렉션 하는
>>
대신 사용>
하십시오. printf
대신에 사용하십시오echo
.- 그리고
~/.bashrc
대신에 넣으십시오 ( 로그인 쉘이 기본적으로 읽히지 않기 때문에~/.bash_profile
소싱 하고 있는지 확인하십시오 ( 버그 / 잘못된 기능)). 호출 하는 스크립트에서 해당 함수를 호출 하려는 경우를 위해 해당 함수를 (with ) 로 내 보내지 않는 한 .~/.bashrc
bash
~/.bashrc
bash
git
export -f git
bash
git