Você tem alguns problemas aqui:
- sua função
git
está se chamando recursivamente em vez do comandogit
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-loginbash
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 comandogit
, - 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 deecho
. - e coloque isso no seu
~/.bashrc
(certificando-se de que seu~/.bash_profile
esteja obtendo~/.bashrc
como loginbash
shells não leu~/.bashrc
por padrão (umbash
bug / misfeature)). A menos que você queira exportar essa funçãogit
(comexport -f git
) caso queira tambémbash
scripts que chamamgit
para chamar essa função.