Alias ​​ZSH z parametrem


98

Próbuję utworzyć alias z parametrem dla mojego prostego dodawania / zatwierdzania / wypychania gita.

Widziałem, że Function można użyć jako aliasu, więc próbuję, ale nie udało mi się.

zanim miałem:

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

Ale chcę mieć możliwość modyfikowania moich zatwierdzeń:

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

(wiem, że to okropna praktyka gita)

Odpowiedzi:


117

Nie możesz stworzyć aliasu z argumentami *, to musi być funkcja. Twoja funkcja jest bliska, wystarczy zacytować określone argumenty zamiast całych poleceń i dodać spacje wewnątrz [].

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

*: Większość powłok nie zezwala na argumenty w aliasach, sądzę, że csh i pochodne tak, ale i tak nie powinieneś ich używać .


cshtak, ale w ogóle nie ma funkcji. (Nie wiem, czy nie ma funkcji, ponieważ aliasy mogą przyjmować parametry, czy też aliasy przyjmują parametry, ponieważ nie ma funkcji, czy co.)
— chepner

Więc nazwałbyś to (z muszli) jak gitall "my commit message"? czy możesz to nazwaćgitall('my commit message')
— archae0pteryx

Funkcje @ archae0pteryx są wywoływane dokładnie tak, jak każde inne polecenie, więc gitall "my commit message".
— Kevin

Sugerowałbym getall() {bez powyższego function- oczywiście, jest to legalne w zsh, ale ta jedyna zmiana sprawi, że będzie to kompatybilne ze wszystkimi powłokami zgodnymi z POSIX.
— Charles Duffy,

10
BTW, jeśli użyłeś git commit -m "${1:-update}"(rozwinięcia parametrów z podanym domyślnym), to w ogóle nie potrzebujesz tej ifinstrukcji.
— Charles Duffy,

108

Jeśli naprawdę potrzebujesz z jakiegoś powodu aliasu z parametrem, możesz go zhakować, osadzając funkcję w swoim aliasie i natychmiast ją wykonując:

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

Widzę, że to podejście jest często używane w aliasach .gitconfig.


7
Taki zepsuty, a jednocześnie taki piękny
— rokoko

14
Po co w ogóle tworzyć alias? Po prostu wywołaj funkcję example.
— tripleee

1
Poza tym, z opóźnieniem, przed nawiasem zamykającym potrzebny jest średnik.
— tripleee

To było piękne. Dzięki temu mogłem stworzyć alias, który dodaje alias do pliku rc, a następnie ponownie ładuje wspomniany plik rc. ❤️ alias addalias = 'f () {echo "alias" $ 1 >> ~ / .zshrc &&. ~ / .zshrc}; f '
— MayTheSForceBeWithYou

6
nie ma potrzeby dodawania żadnych nazw do zakresu globalnego, po prostu użyj funkcji anonimowej:alias example='(){ echo Your arg was $1. ;}'
— maoizm 22.04.2020

11

Użyłem tej funkcji w pliku .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
}

Tutaj git push origin HEADjest odpowiedzialny za zdalne przekazanie twojej obecnej gałęzi.

Z wiersza poleceń uruchom to polecenie: gitall "commit message goes here"

Jeśli po prostu uruchomimy gitallbez komunikatu o zatwierdzeniu, komunikat o zatwierdzeniu będzie taki, updatejak wskazała funkcja.


4

"git add ."a pozostałe polecenia między "to tylko ciągi znaków dla bash, usuń "s.

Możesz [ -n "$1" ]zamiast tego użyć w swoim ciele if.


0

Wypróbowałem zaakceptowaną odpowiedź (Kevina), ale otrzymałem następujący błąd

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

W związku z tym zmieniłem składnię na tę, opartą na problemie z git i zadziałało.

    function gitall {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
    }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.