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 develop
sin errores, quiero guardar develop
en 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í:
git
función se llama a sí misma recursivamente en lugar delgit
comando original .$@
comillas, lo que no tiene ningún sentidoecho
para datos arbitrarios .git
comando original .~/.bash_profile
que está destinado a personalizar su sesión de inicio de sesión, no su shell y normalmente no se lee mediantebash
invocaciones sin inicio de sesión .Querrías algo como:
Es decir:
command
para ejecutar elgit
comando ,git
en una variable local y devolverlo al salir,>>
lugar de>
para la redirección al archivo de registro.printf
lugar deecho
.~/.bashrc
lugar (asegurándose de que su~/.bash_profile
fuente sea,~/.bashrc
ya que losbash
shells de inicio de sesión no se leen~/.bashrc
por defecto (unbash
error / error)). A menos que desee exportar esagit
función (conexport -f git
) en caso de que también deseebash
scripts que llamengit
para 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)