ZSH alias com parâmetro


98

Estou tentando fazer um alias com parâmetro para meu git add / commit / push simples.

Eu vi que Function poderia ser usado como apelido, então tentei, mas não consegui.

antes de eu ter:

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

Mas eu quero ser capaz de modificar meus commits:

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

(eu sei que é uma prática git terrível)

Respostas:


117

Você não pode fazer um alias com argumentos *, tem que ser uma função. Sua função está perto, você só precisa citar alguns argumentos em vez dos comandos inteiras, e adicionar espaços dentro do [].

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

*: A maioria dos shells não permite argumentos em aliases, acredito que csh e derivados permitem, mas você não deveria usá-los de qualquer maneira .


cshfaz, mas não tem nenhuma função. (Não sei se não há funções porque os aliases podem receber parâmetros, ou se os aliases usam parâmetros porque não há funções, ou o quê.)
— chepner

Então, você chamaria (do shell) como gitall "my commit message"? ou você chamaria degitall('my commit message')
— archae0pteryx

As funções @archae0pteryx são chamadas exatamente como qualquer outro comando gitall "my commit message".
— Kevin

Eu sugeriria getall() {sem o anterior function- claro, é legal de qualquer maneira no zsh, mas essa única alteração tornará isso compatível com todos os shells compatíveis com POSIX.
— Charles Duffy

10
BTW, se você usou git commit -m "${1:-update}"(uma expansão de parâmetro com um padrão fornecido), então você não precisaria da ifinstrução.
— Charles Duffy,

108

Se você realmente precisar usar um alias com um parâmetro por algum motivo, pode hackea-lo incorporando uma função em seu alias e executando-a imediatamente:

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

Vejo que essa abordagem é muito usada em aliases .gitconfig.


7
Tão hacky e ainda tão bonito
— rococó

14
Por que criar um alias? Basta chamar a função example.
— tripleee

1
Além disso, tardiamente, você precisa de um ponto e vírgula antes da chave de fechamento.
— tripleee

Isso era lindo. Com isso eu fui capaz de fazer um alias que adiciona um alias a um arquivo rc, e então recarrega o referido arquivo rc. ❤️ alias addalias = 'f () {echo "alias" $ 1 >> ~ / .zshrc &&. ~ / .zshrc}; f '
— MayTheSForceBeWithYou

6
não há necessidade de adicionar nenhum nome no escopo global, apenas use a função anônima:alias example='(){ echo Your arg was $1. ;}'
— maoizm

11

Usei esta função no arquivo .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
}

Aqui git push origin HEADé responsável por empurrar seu branch atual no remoto.

No prompt de comando, execute este comando: gitall "commit message goes here"

Se apenas executarmos gitallsem nenhuma mensagem de confirmação, a mensagem de confirmação será updatecomo a função disse.


4

"git add ."e os outros comandos entre "são apenas strings para bash, remova o "s.

Você pode querer usar [ -n "$1" ]em seu corpo if.


0

Tentei a resposta aceita (Kevin), mas estava obtendo o seguinte erro

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

Portanto, mudei a sintaxe para isso, com base no problema do git, e funcionou.

    function gitall {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
    }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.