Quiero establecer fácilmente un alias git-go
para esta línea de terminal:
git commit -m "init "; git push; git status
Entonces, cuando ingreso git-go, esta línea debería ingresar.
¿Cómo puedo hacer eso? Las respuestas que vi solo cubren el alias de un comando sin parámetros. Pero quiero establecer un alias en una línea terminal arbitraria.
command-line
bash
alias
Philip Rego
fuente
fuente
Respuestas:
Haces esto de la misma manera que establecerías cualquier alias.
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ésgit 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
:O puede ejecutarlo con argumentos a los que desea pasar
git status
. Por ejemplo, cuando lo ejecuta de esta manera, el último comando esgit-status --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: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 .
fuente
git-go
en su RUTA ygit go
funcionará.Puede declararlo una función en su
~/.bash_aliases
archivo de la siguiente manera:o puede crear un alias en el mismo archivo así:
No olvide volver a abrir su terminal o obtener el archivo (
. ~/.bash_aliases
) después de haberlo cambiado.fuente
Como se trata de
git
comandos, es posible que también desee conocer la sintaxis para agregar un alias, especialmente paragit
:Esto agregará un nuevo alias a su
git
configuración local (at~/.gitconfig
) y le permitirá emitircuando dentro de un
git
repositorio. Cada vez que ejecutagit go
un shell se invoca ygit commit -m "init"; git push; git status
se le pasa el comando .Vea la documentación de git para más detalles.
fuente
Fue un problema de citas. Había intentado esto:
Pero tengo este error:
Obtuve ese error porque estaba usando comillas anidadas incorrectamente. Aquí está la sintaxis correcta:
O:
O sin comillas si no hay espacios en blanco en el mensaje de confirmación:
fuente
init
; los dulces de la cáscara'init'
,"init"
yinit
el mismo. (Por lo tanto, es posible que desee volver a colocar la versión original y también mostrar la nueva versión, para ilustrar la situación en la que se necesitan comillas anidadas). En cuanto a poder agregar el resto del mensaje, puede pasarlo como una línea de comandos argumento si (como se muestra en Videonauth y mis respuestas) definió una función en lugar de un alias. Por ejemplo, podría definirgit-go() { git commit -m "init $1"; git push; git status; }
(que es lo que tengo en mi respuesta pero con en"init $1"
lugar de solo"$1"
).