Parametreli ZSH takma adı


94

Basit git add / commit / push işlemim için parametresiyle bir takma ad yapmaya çalışıyorum.

İşlevin takma ad olarak kullanılabileceğini gördüm, bu yüzden denedim ama başaramadım ..

benden önce:

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

Ancak taahhütlerimi değiştirebilmek istiyorum:

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

(bunun berbat bir pratik olduğunu biliyorum)

Yanıtlar:


113

* Argümanlarıyla bir takma ad oluşturamazsınız, bu bir işlev olmalıdır. İşleviniz yakın, yalnızca tüm komutlar yerine belirli argümanları alıntılamanız ve [].

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

*: Çoğu kabuk takma adlarda argümanlara izin vermez, csh ve türevlerinin izin verdiğine inanıyorum, ancak yine de kullanmamalısınız .


cshvar, ancak hiçbir işlevi yok. (Herhangi bir işlev olup olmadığını bilmiyorum çünkü takma adlar parametre alabilir mi veya takma adlar işlev olmadığı için mi parametre alır?)
chepner

Yani buna (kabuktan) gibi gitall "my commit message"mi diyorsun? yoksa onu çağırır gitall('my commit message')
mısın

@ archae0pteryx işlevleri tıpkı diğer komutlar gibi çağrılır, bu yüzden gitall "my commit message".
Kevin

getall() {Yukarıdakiler olmadan öneririm function- elbette, zsh'da her iki şekilde de yasaldır, ancak bu tek değişiklik, bunu tüm POSIX uyumlu kabuklarla uyumlu hale getirecektir.
Charles Duffy

9
BTW, kullandıysanız git commit -m "${1:-update}"(varsayılan olarak sağlanan bir parametre genişletmesi), o zaman ififadeye hiç ihtiyacınız olmaz .
Charles Duffy

104

Herhangi bir nedenle bir parametre ile gerçekten bir takma ad kullanmanız gerekiyorsa, takma adınıza bir işlev ekleyerek ve hemen çalıştırarak onu hackleyebilirsiniz:

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

Bu yaklaşımın .gitconfig takma adlarında çokça kullanıldığını görüyorum.


7
Çok huysuz ama yine de çok güzel
rococo

14
Neden bir takma ad yapmalı? Sadece işlevi çağırın example.
üçlü

1
Ayrıca, gecikmeli olarak, kapanış ayracından önce bir noktalı virgül gerekir.
2018

Bu çok güzeldi. Bununla, rc dosyasına bir takma ad ekleyen ve ardından adı geçen rc dosyasını yeniden yükleyen bir takma ad oluşturabildim. ❤️ takma ad addalias = 'f () {echo "diğer ad" $ 1 >> ~ / .zshrc &&. ~ / .zshrc}; f '
MayTheSForceBeWithYou

5
genel kapsama herhangi bir isim eklemeye gerek yok, sadece anonim işlevi kullanın:alias example='(){ echo Your arg was $1. ;}'
maoizm

10

Bu işlevi .zshrc dosyasında kullandım:

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
}

Burada git push origin HEAD, mevcut şubenizi uzaktan kumanda etmekten sorumludur.

Komut isteminden şu komutu çalıştırın: gitall "commit message goes here"

Herhangi gitallbir commit mesajı olmadan çalışırsak , commit mesajı updatefonksiyonun söylediği gibi olacaktır .


4

"git add ."ve aradaki diğer komutlar "sadece bash dizeleridir, kaldır" .

Bunun [ -n "$1" ]yerine kendi bedeninizde kullanmak isteyebilirsiniz .


0

Kabul edilen cevabı denedim (Kevin's) ama şu hatayı alıyordum

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

Bu nedenle sözdizimini git sorununa göre buna değiştirdi ve işe yaradı.

    function gitall {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.