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)

Albttx
fonte

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 .

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

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

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

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