Terminal hattına nasıl takma ad ayarlayabilirim?


9

git-goBu terminal hattına kolayca bir takma ad ayarlamak istiyorum :

git commit -m "init "; git push; git status

Git-go'ya girdiğimde bu satır girilmelidir.

Bunu nasıl yapabilirim? Gördüğüm cevaplar sadece parametresiz bir komutun takma adını kapsar. Ancak rastgele bir terminal hattına bir takma ad ayarlamak istiyorum.


Ne denedin? Başka hangi soruları okudun? askubuntu.com/q/17536/507051 oldukça iyi açıklıyor, sorunuz tam olarak nedir?
tatlı

Benim sorunum dış tırnak için tek yerine çift tırnak kullanmak oldu.
Philip Rego

Dış tarafta çift tırnak ve iç kısımda tek tırnak kullanarak bunu yapabilirsiniz.
Videonauth

Yanıtlar:


13

Bunu, diğer takma adlarla aynı şekilde yaparsınız.

alias git-go='git commit -m "init "; git push; git status'

Zor olduğu durum , bir takma ad bir komutu çalıştırıp bu komuta argümanlar ilettiğinde veya bir takma ad birbirinden ayrılmış birden fazla komut çalıştırdığında bile ;değil, bunun yerine takma adın kendi komut satırı bağımsız değişkenlerini kabul etmesini ve kullanmasını istediğiniz zamandır. .

Örneğin, bu takma adın adından sonra yazdığınız her şey sonuna yapıştırılacak ve daha sonra üçüncü gitkomuta komut satırı bağımsız değişkenleri olarak aktarılacaktır git status. (Gerçekten de, aşağıdaki metnin sonuna yapıştırıldığı kadar değil, aşağıdaki metnin tek başına bırakıldığı ve takma adın tanımıyla değiştirildiği kadar.)

Böylece, takma adınızı bağımsız değişkenler olmadan çalıştırabilirsiniz ve son komut şöyledir git status:

git-go

Veya iletmek istediğiniz bağımsız değişkenlerle çalıştırabilirsiniz git status. Örneğin, bu şekilde çalıştırdığınızda, son komut şöyledir git-status --show-stash:

git-go --show-stash

Ne edemez Bash (ve diğer Bourne tarzı kabukları) takma ad ile ilgisi takma komut satırı argümanları kabul ve başka bir yerde sonuna kadar koyun yapmaktır.

Örneğin git-go, tamamlama mesajı için kullandığı bir argümanı kabul etmek istediğinizi varsayalım . Bunu takma ad olarak yazamazsınız. Çözüm, bunun yerine kabuk işlevi olarak yazmak olacaktır:

git-go() { git commit -m "$1"; git push; git status; }

Bir kabuk işlevi tanımında, konumsal parametreler $1, $2ve benzeri kabuk işlevine geçirilen komut satırı bağımsız değişkenlerin değerlerini tutun. Takma adların buna karşılık gelen bir işlevi yoktur, çünkü takma ad genişletmesi, kabuk bir komutu ayrıştırdığında çok erken gerçekleşen bir tür makro işleme şeklidir.

Videonauth'un önerdiği gibi, tanımda konumsal parametreleri kullanmanıza gerek olmasa bile, elbette bir kabuk işlevi olarak yazabilirsiniz .


1
Daha da iyisi: PATH'inize bir komut dosyası yerleştirin git-gove git goçalışacaktır.
D. Ben Knoble

10

~/.bash_aliasesDosyanızda aşağıdaki gibi bir işlev bildirebilirsiniz :

git-go(){
    git commit -m "init "
    git push
    git status
}

veya aynı dosyada şöyle bir takma ad oluşturabilirsiniz:

alias git-go='git commit -m "init "; git push; git status'

. ~/.bash_aliasesDeğiştirdikten sonra terminalinizi yeniden açmayı veya dosyayı ( ) kaynaklamayı unutmayın .


1
Diğer ad yerine kabuk işlevi yazmanın bir yararı da tırnak içine alınmaya gerek olmamasıdır. Dolayısıyla bu cevap OP'nin benimkinden daha doğrudan olduğu ortaya çıkan merkezi sorunu ele almaktadır .
Eliah Kagan

@EliahKagan Her ikisi de bu soru için iyidir, ancak sizinki daha fazladır. Sizi tekrar görmek güzel.
Videonauth

4

gitKomutlarla uğraşırken , özellikle aşağıdakiler için bir takma ad eklemek için sözdizimini bilmek isteyebilirsiniz git:

git config --global alias.go '!sh -c "git commit -m \"init\"; git push; git status"'

Bu, yerel gityapılandırmanıza (at ~/.gitconfig) yeni bir takma ad ekleyecek ve

git go

bir gitdepo içerisindeyken. Her çalıştırdığınızda git gobir kabuk çağrılır ve komut git commit -m "init"; git push; git statusona geçirilir.

Daha fazla bilgi için git belgesine bakınız.


3

Bir alıntı sorunuydu. Bunu denedim:

alias="git commit -m "init "; git push; git status"

Ancak şu hatayı aldım:

bash: ; git push; git status: command not found

Bu hatayı aldım çünkü iç içe tırnakları yanlış kullanıyordum. İşte doğru sözdizimi:

alias='git commit -m "init "; git push; git status'

Veya:

alias="git commit -m 'init '; git push; git status"

Veya yürütme iletisinde boşluk yoksa tırnak işaretleri olmadan:

alias="git commit -m init; git push; git status"

Bu yanıtı gönderdiğiniz için teşekkürler (cevabım ve Videonauth'umun alıntı konularına fazla odaklanmaması nedeniyle). Meraktan, neden mesajlarınızda bir boşluk bırakmak istediniz?
Eliah Kagan

Bu satırı el ile yapıştırırdım ve boşluktan sonra bir mesaj eklerdim, ama bu burada mantıklı değil, bu yüzden çıkardım.
Philip Rego

1
Bu durumda, alıntı yapmanız gerekmez init; kabuk davranır 'init', "init"ve initaynı. (Bu nedenle, iç içe tırnakların gerekli olduğu durumu göstermek için orijinal sürümü geri koymak ve yeni sürümü göstermek isteyebilirsiniz.) İletinin geri kalanını ekleyebilmek için bunu bir komut satırı olarak iletebilirsiniz. argümanı (Videonauth ve cevaplarımda gösterildiği gibi) takma ad yerine bir işlev tanımladıysanız. Örneğin, tanımlayabilirsiniz git-go() { git commit -m "init $1"; git push; git status; }(bu benim cevabımda var ama "init $1"sadece yerine "$1").
Eliah Kagan

Teşekkürler Bir sonraki denemek istedim.
Philip Rego
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.