git branch
예를 들어, (항상 몇 단어로 구성된) 명령이 있다고 가정해 보겠습니다 .
내가 원하는 것은 이 명령이 인수와 함께 실행되는 시기를 추적하는 것입니다. 예를 들어, 오류 없이 명령을 실행했다면 이를 파일로 git branch develop
저장하고 싶습니다 .develop
나는 다음과 같이 git 명령을 재정의하려고 시도했습니다 .bash_profile
.
git () {
if [ $# -eq 3 ]
then
git $@
echo $2 > /path/tacked_parameters.txt
else
git $@
fi
}
하지만 그다지 잘 작동하지 않는 것 같습니다. 이를 수행할 수 있는 방법이 있습니까?
답변1
여기에 몇 가지 문제가 있습니다.
- 귀하의
git
함수는 원래 명령 대신 재귀적으로 자신을 호출하고 있습니다git
. - 따옴표 없이 사용하고 있으니
$@
말이 안 됩니다. - 누구세요다른 변수는 따옴표 없이 그대로 두세요., 쉘에서 분할 + 와일드카드가 필요합니다.
- 누구세요
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
소싱이 있는지 확인하십시오 ( 버그/버그 기능)). 함수 를 내보내려는 경우가 아니면 ( 사용 ) 함수를 호출하는 스크립트를 호출해야 하는 경우도 있습니다 .~/.bashrc
bash
~/.bashrc
bash
git
export -f git
bash
git