Digamos que tengo un comando git branch(siempre con un par de palabras), por ejemplo.
Lo que quiero es hacer un seguimiento de cuándo se ejecuta este comando con argumentos. Por ejemplo, si ejecuto el comando git branch developsin errores, quiero guardar developen un archivo.
Traté de sobrescribir el comando git en mi .bash_profile, algo como esto:
git () {
if [ $# -eq 3 ]
then
git $@
echo $2 > /path/tacked_parameters.txt
else
git $@
fi
}
Pero parece que no funciona bien. ¿Hay alguna forma de hacer esto?

Respuestas:
Tienes algunos problemas aquí:
gitfunción se llama a sí misma recursivamente en lugar delgitcomando original .$@comillas, lo que no tiene ningún sentidoechopara datos arbitrarios .gitcomando original .~/.bash_profileque está destinado a personalizar su sesión de inicio de sesión, no su shell y normalmente no se lee mediantebashinvocaciones sin inicio de sesión .Querrías algo como:
Es decir:
commandpara ejecutar elgitcomando ,giten una variable local y devolverlo al salir,>>lugar de>para la redirección al archivo de registro.printflugar deecho.~/.bashrclugar (asegurándose de que su~/.bash_profilefuente sea,~/.bashrcya que losbashshells de inicio de sesión no se leen~/.bashrcpor defecto (unbasherror / error)). A menos que desee exportar esagitfunción (conexport -f git) en caso de que también deseebashscripts que llamengitpara llamar a esa función.fuente
[ "$#" -eq 2 ], según su ejemplo. Y podría ser una buena idea agregar también la fecha a "tacked_parameters.txt". E iría por el caso general (es decir, no solo el seguimiento de los 2º parámetros cuando hay 2 parámetros, sino el seguimiento de cualquier parámetro): ¿Me desharía del if y tengoprintf '%s: %s\n' "$(date '+%Y-%m-%dT%H:%M:%S')" "$0 $*":? (es decir, muestre el comando + todos los parámetros (tenga en cuenta que aún pierde algo de información, por ejemplo, qué parámetro tiene intra-separadores, si los hay). Fecha portátil cercana al estándar iso8601)