Você tem alguns problemas aqui:
- sua função
gitestá se chamando recursivamente em vez do comandogitoriginal. - 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
echopara dados arbitrários . - você está perdendo o status de saída do comando
gitoriginal. - 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-loginbashinvocaçõ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
commandpara executar o comandogit, - salve o status de saída de
gitem uma variável local e retorne na saída, - use
>>em vez de>para redirecionamento para o arquivo de log. - use
printfem vez deecho. - e coloque isso no seu
~/.bashrc(certificando-se de que seu~/.bash_profileesteja obtendo~/.bashrccomo loginbashshells não leu~/.bashrcpor padrão (umbashbug / misfeature)). A menos que você queira exportar essa funçãogit(comexport -f git) caso queira tambémbashscripts que chamamgitpara chamar essa função.