Acompanhe certos parâmetros em algum comando

10

Digamos que eu tenha um comando git branch (sempre com algumas palavras), por exemplo.

O que eu quero é manter o controle de quando este comando é executado com argumentos. Por exemplo, se eu executar o comando git branch develop sem erros, quero salvar develop em um arquivo.

Eu tentei sobrescrever o comando git no meu .bash_profile , algo assim:

git () {
    if [ $# -eq 3 ]
    then
        git $@
        echo $2 > /path/tacked_parameters.txt
    else
        git $@
    fi
}

Mas parece que não funciona bem. Existe alguma maneira de fazer isso?

    
por jherran 12.05.2015 / 14:01

1 resposta

18

Você tem alguns problemas aqui:

  • sua função git está se chamando recursivamente em vez do comando git original.
  • você está usando $@ sem aspas, o que não faz sentido algum
  • você é deixando outras variáveis sem aspas , pedindo ao shell que as separe + globe.
  • você está usando echo para dados arbitrários .
  • você está perdendo o status de saída do comando git original.
  • você está sobrescrevendo seu arquivo de registro a cada invocação.
  • você está colocando as definições de função em seu ~/.bash_profile , que serve para personalizar sua sessão de login, não seu shell, e normalmente não é lido por não-login bash invocações.

Você gostaria de algo como:

git() {
  if [ "$#" -eq 3 ]
  then
    local ret
    command git "$@"; ret=$?
    printf '%s\n' "$2" >> /path/tacked_parameters.txt
    return "$ret"
  else
    command git "$@"
  fi
}

Isto é:

  • cite suas variáveis,
  • use command para executar o comando git ,
  • salve o status de saída de git em uma variável local e retorne na saída,
  • use >> em vez de > para redirecionamento para o arquivo de log.
  • use printf em vez de echo .
  • e coloque isso no seu ~/.bashrc (certificando-se de que seu ~/.bash_profile esteja obtendo ~/.bashrc como login bash shells não leu ~/.bashrc por padrão (um bash bug / misfeature)). A menos que você queira exportar essa função git (com export -f git ) caso queira também bash scripts que chamam git para chamar essa função.
por 12.05.2015 / 14:12