ZSH-Alias ​​mit Parameter

96

Ich versuche einen Alias ​​mit Parameter für mein einfaches Git Add / Commit / Push zu erstellen.

Ich habe gesehen, dass Function als Alias ​​verwendet werden kann, also versuche ich es, aber ich habe es nicht geschafft.

bevor ich hatte:

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

Aber ich möchte meine Commits ändern können:

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

(Ich weiß, es ist eine schreckliche Git-Praxis)

albttx
quelle

Antworten:

114

Sie können keinen Alias ​​mit Argumenten * erstellen, es muss eine Funktion sein. Ihre Funktion ist eng, Sie müssen nur bestimmte Argumente anstelle der gesamten Befehle zitieren und Leerzeichen innerhalb der hinzufügen [].

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

*: Die meisten Shells erlauben keine Argumente in Aliasen, ich glaube, csh und Derivate tun dies, aber Sie sollten sie trotzdem nicht verwenden .

Kevin
quelle
cshtut, aber es hat überhaupt keine Funktionen. (Ich weiß nicht, ob es keine Funktionen gibt, weil Aliase Parameter annehmen können, oder ob Aliase Parameter annehmen, weil es keine Funktionen gibt, oder was.)
chepner
Also würdest du es (aus der Shell) so nennen gitall "my commit message"? oder würden Sie es nennengitall('my commit message')
archae0pteryx
@ archae0pteryx-Funktionen werden genau wie jeder andere Befehl aufgerufen gitall "my commit message".
Kevin
Ich würde vorschlagen, getall() {ohne das Vorhergehende function- sicher, es ist in beiden Fällen legal in zsh, aber diese einzige Änderung macht dies mit allen POSIX-kompatiblen Shells kompatibel.
Charles Duffy
9
Übrigens, wenn Sie git commit -m "${1:-update}"eine Parametererweiterung mit einem Standardwert verwenden würden, würden Sie die ifAnweisung überhaupt nicht benötigen .
Charles Duffy
107

Wenn Sie aus irgendeinem Grund wirklich einen Alias ​​mit einem Parameter verwenden müssen, können Sie ihn hacken, indem Sie eine Funktion in Ihren Alias ​​einbetten und sofort ausführen:

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

Ich sehe, dass dieser Ansatz häufig in .gitconfig-Aliasen verwendet wird.

Joelpt
quelle
7
So hackig und doch so schön
Rokoko
14
Warum überhaupt einen Alias ​​machen? Rufen Sie einfach die Funktion auf example.
Tripleee
1
Außerdem benötigen Sie verspätet ein Semikolon vor der schließenden Klammer.
Tripleee
Das war wunderschön. Damit konnte ich einen Alias ​​erstellen, der einer RC-Datei einen Alias ​​hinzufügt, und dann die RC-Datei neu laden. ❤️ alias addalias = 'f () {echo "alias" $ 1 >> ~ / .zshrc &&. ~ / .zshrc}; f '
MayTheSForceBeWithYou
6
Sie müssen dem globalen Bereich keine Namen hinzufügen. Verwenden Sie einfach die anonyme Funktion:alias example='(){ echo Your arg was $1. ;}'
maoizm
11

Ich habe diese Funktion in der .zshrc-Datei verwendet:

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
}

Hier git push origin HEADist verantwortlich, um Ihren aktuellen Zweig auf Remote zu schieben.

Führen Sie an der Eingabeaufforderung diesen Befehl aus: gitall "commit message goes here"

Wenn wir nur gitallohne Festschreibungsnachricht ausgeführt werden, entspricht die Festschreibungsnachricht updateder Funktion.

Hasan Abdullah
quelle
4

"git add ."und die anderen Befehle dazwischen "sind nur Zeichenfolgen für Bash, entfernen Sie das "s.

Vielleicht möchten Sie [ -n "$1" ]stattdessen in Ihrem if-Körper verwenden.

Alberto Zaccagni
quelle
0

Ich habe die akzeptierte Antwort (Kevins) ausprobiert, aber den folgenden Fehler erhalten

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

Daher wurde die Syntax basierend auf dem Git-Problem dahingehend geändert und es funktionierte.

    function gitall {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
    }
GV Sandeep
quelle