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)

albttx
fuente

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 .

Kevin
fuente
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.

joelpt
fuente
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.

Hasan Abdullah
fuente
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.

Alberto Zaccagni
fuente
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
    }
GV Sandeep
fuente