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.