Alias ​​de ZSH con parámetro


94

Estoy tratando de crear un alias con el parámetro para mi simple git add / commit / push.

He visto que la función se puede usar como alias, así que lo intenté pero no lo logré.

antes de que tuviera:

alias gitall="git add . ; git commit -m 'update' ; git push"

Pero quiero poder modificar mis confirmaciones:

function gitall() {
    "git add ."
    if [$1 != ""]
        "git commit -m $1"
    else
        "git commit -m 'update'"
    fi
    "git push"
}

(sé que es una práctica terrible de idiotas)

Respuestas:


113

No puedes crear un alias con argumentos *, tiene que ser una función. Su función es cercana, solo necesita citar ciertos argumentos en lugar de los comandos completos y agregar espacios dentro del [].

gitall() {
    git add .
    if [ "$1" != "" ] # or better, if [ -n "$1" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
}

*: La mayoría de las shells no permiten argumentos en alias, creo que csh y derivados sí, pero no debería usarlos de todos modos .


cshlo hace, pero no tiene ninguna función. (No sé si no hay ninguna función porque los alias pueden tener parámetros, o si toman parámetros alias porque no hay funciones, o qué.)
— chepner

¿Entonces lo llamarías (desde el caparazón) como gitall "my commit message"? o lo llamaríasgitall('my commit message')
— archae0pteryx

Las funciones de @ archae0pteryx se llaman exactamente como cualquier otro comando, entonces gitall "my commit message".
— Kevin

Yo sugiero getall() { sin lo anterior function; claro, es legal de cualquier manera en zsh, pero ese único cambio lo hará compatible con todos los shells compatibles con POSIX.
— Charles Duffy

9
Por cierto, si usó git commit -m "${1:-update}"(una expansión de parámetro con un predeterminado proporcionado), entonces no necesitaría la ifdeclaración en absoluto.
— Charles Duffy

104

Si realmente necesita usar un alias con un parámetro por alguna razón, puede piratearlo incrustando una función en su alias y ejecutándola inmediatamente:

alias example='f() { echo Your arg was $1. };f'

Veo que este enfoque se usa mucho en los alias .gitconfig.


7
Tan hacky y sin embargo tan hermoso
— rococó

14
¿Por qué crear un alias? Simplemente llame a la función example.
— tripleee

1
Además, tardíamente, necesita un punto y coma antes de la llave de cierre.
— tripleee

Esto fue hermoso. Con esto pude hacer un alias que agrega un alias a un archivo rc, luego vuelve a cargar dicho archivo rc. ❤️ alias addalias = 'f () {echo "alias" $ 1 >> ~ / .zshrc &&. ~ / .zshrc}; f '
— MayTheSForceBeWithYou

5
no es necesario agregar ningún nombre al alcance global, solo use la función anónima:alias example='(){ echo Your arg was $1. ;}'
— maoizm

10

Usé esta función en el archivo .zshrc:

function gitall() {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update # default commit message is `update`
    fi # closing statement of if-else block
    git push origin HEAD
}

Aquí git push origin HEADes responsable de impulsar su rama actual en remoto.

Desde el símbolo del sistema, ejecute este comando: gitall "commit message goes here"

Si simplemente ejecutamos gitallsin ningún mensaje de confirmación, el mensaje de confirmación será updatecomo dice la función.


4

"git add ."y los otros comandos entre ellos "son solo cadenas para bash, elimine la "s.

Es posible que desee utilizarlo [ -n "$1" ]en su cuerpo if.


0

Probé la respuesta aceptada (la de Kevin) pero recibí el siguiente error

defining function based on alias `gitall'
parse error near `()'

Por lo tanto, cambió la sintaxis a esto, en función del problema de git y funcionó.

    function gitall {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
    }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.