특정 명령에 대한 특정 매개변수 추적

특정 명령에 대한 특정 매개변수 추적

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소싱이 있는지 확인하십시오 ( 버그/버그 기능)). 함수 를 내보내려는 경우가 아니면 ( 사용 ) 함수를 호출하는 스크립트를 호출해야 하는 경우도 있습니다 .~/.bashrcbash~/.bashrcbashgitexport -f gitbashgit

관련 정보