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.