Haces esto de la misma manera que establecerías cualquier alias.
alias git-go='git commit -m "init "; git push; git status'
La situación en la que se vuelve difícil no es cuando un alias ejecuta un comando y pasa argumentos a ese comando, ni siquiera cuando un alias ejecuta múltiples comandos separados por ;
, sino que es cuando desea que un alias acepte y use sus propios argumentos de línea de comandos .
Por ejemplo, todo lo que escriba después del nombre de ese alias se pegará al final y, por lo tanto, se pasará como argumentos de línea de comando al tercer git
comando, después git status
. (Realmente no es tanto que el siguiente texto se pegue al final, sino que se deja solo el texto siguiente y el nombre del alias se reemplaza por su definición).
Entonces puede ejecutar su alias sin argumentos, lo que funciona, y el último comando es git status
:
git-go
O puede ejecutarlo con argumentos a los que desea pasar git status
. Por ejemplo, cuando lo ejecuta de esta manera, el último comando es git-status --show-stash
:
git-go --show-stash
Lo que no puede hacer con un alias en Bash (y otros shells de estilo Bourne) es hacer que el alias acepte argumentos de línea de comandos y los coloque en otro lugar que no sea el final.
Por ejemplo, suponga que desea git-go
aceptar un argumento que utiliza para el mensaje de confirmación. No podría escribir esto como un alias. La solución sería escribirlo como una función de shell en su lugar:
git-go() { git commit -m "$1"; git push; git status; }
En la definición de una función de shell, los parámetros posicionales $1
, $2
etc., contienen los valores de los argumentos de la línea de comandos pasados a la función de shell. Los alias no tienen una funcionalidad que corresponda a esto, porque la expansión de alias es realmente una forma de macroprocesamiento, que tiene lugar muy temprano, cuando el shell analiza un comando.
Por supuesto, puede escribirlo como una función de shell incluso si no necesita usar parámetros posicionales en la definición, como sugiere Videonauth .