Cada vez que el usuario escribe git commit -a, quiero ejecutarlo en mi propio script, A continuación, ejecute el comando original git commit.. y haz que se ejecute como lo haría normalmente.
Mira la última línea. Llamará a git con sus parámetros tomados del comando shell.
Davide Berra
¿Llamará al git original, o llamará al nuevo alias?
Binny Zupnick
Se llamará el git original. No caerás en una recursión.
Davide Berra
Los alias no se expanden en un shell no interactivo. Pruébate
Davide Berra
0
Puede definir una función de shell que invoque un script personalizado que luego pasa cosas al comando git original:
git() {
case $1 in
commit)
echo "WUFF"
;;
esac
\git "$@"
}
Poner esta función en uno de los archivos RC de su shell (por ejemplo, ~/.profile o /etc/profile en el caso de sh / bash / ksh shells) estará disponible después del siguiente inicio de sesión. Por supuesto, puedes obtener mucho más elaboare que esto. Además, es posible que desee echar un vistazo a la git-sh-setup(1) y git-rev-parse(1) páginas de manual, en particular la sección sobre parseopt.
Usted puede source ~/.profile para actualizar el shell actual con la nueva función,
iiSeymour
Claro, y en Mac es suficiente con abrir una nueva pestaña / terminal. Pero el método de cierre de sesión / inicio de sesión es a prueba de balas ;-)
Esto se debe a que cada nueva terminal / pestaña invoca un nuevo shell, por lo que todos los archivos de configuración relevantes, como ~/.bashrc será leído. source ~/.bashrc estarán a prueba de balas para actualizar el shell actual con los cambios.
iiSeymour
0
Si creas un script ls en un lugar como ~/bin que se encuentra en el path antes de /bin/ls su script será ejecutado en su lugar.
user@wopr /home/user/bin/: $ cat ls
#!/bin/bash
echo "Security Breached!"
# Run original command
/bin/ls "$@"
Ahora al listar archivos el mensaje Security Breached! siempre se muestra.
user@wopr /home/user/bin/: $ ls
Security Breached!
ls file.sh file myscript.sh
user@wopr /home/user/bin/: $ which ls
/home/user/bin/ls
Debe tener en cuenta los directorios en su path y quién puede escribir en esos directorios.
Respuestas:
Podría usar ".git / hooks" para instalar un gancho "pre-commit", tal vez: http://git-scm.com/book/en/Customizing-Git-Git-Hooks
Esto es normalmente cómo harías esto. Por supuesto, sería útil si explicara exactamente QUÉ desea que haga la "sobrecarga".
fuente
Si quieres que tu "gancho" no se limite solo a
git
pero necesitas hacer que funcione con cualquier ejecutable, puedes usaralias
entonces
myhackyscript.sh
puede parecermyhackyscript.sh
debe ser almacenado en un$PATH
carpeta como/usr/bin/
fuente
Puede definir una función de shell que invoque un script personalizado que luego pasa cosas al comando git original:
Poner esta función en uno de los archivos RC de su shell (por ejemplo,
~/.profile
o/etc/profile
en el caso de sh / bash / ksh shells) estará disponible después del siguiente inicio de sesión. Por supuesto, puedes obtener mucho más elaboare que esto. Además, es posible que desee echar un vistazo a lagit-sh-setup(1)
ygit-rev-parse(1)
páginas de manual, en particular la sección sobreparseopt
.fuente
source ~/.profile
para actualizar el shell actual con la nueva función,~/.bashrc
será leído.source ~/.bashrc
estarán a prueba de balas para actualizar el shell actual con los cambios.Si creas un script
ls
en un lugar como~/bin
que se encuentra en elpath
antes de/bin/ls
su script será ejecutado en su lugar.Ahora al listar archivos el mensaje
Security Breached!
siempre se muestra.Debe tener en cuenta los directorios en su
path
y quién puede escribir en esos directorios.fuente