bashrc tembel ikame


10

~/.bashrcTakma adlar , ~ / .bashrc yürütülürken (bir terminal açılırken) yerine , çalışma zamanında değiştirmeleri nasıl değerlendirir$() ?

Bu komutu sık sık, bunun için bir takma ad eklemek istediğinizde çalıştırıyorum:

svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff

Ancak, ~/.bashrcbir takma ad olarak eklediğimde , değerlendirmelerin terminali açtığımda sahip oldukları değerlere sabit kodlandığını görüyorum:

$ alias
alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff'

Bir terminal açarsanız ~hata alıyorum:

svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
$ alias
alias svnbranch='svn diff -r :HEAD  | colordiff'
$

Takma adın bu iki varyasyonunu denedim ~/.bashrc, her ikisi de (beklediğim gibi) aynı etkiye sahip:

alias svnbranch="svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff"
alias svnbranch="svn diff -r `svn info | grep ^Revision | awk {'print $2'}`:HEAD `svn info | grep ^URL | awk {'print $2'}` | colordiff"

Çalışma sırasında ikameleri ~/.bashrcdeğerlendirmek için takma adlar nasıl alınır$() ?

Ayrıca, Google'da bu durum nasıl aranır ? Ben "bashrc ikame", "bashrc tembel ikame" ve diğer anahtar ifadeler üzerinde google denedim, ama hakkında bilgi bulmak için yeterli ortak bir sorun olması gerektiğini hissediyorum hiçbir şey bulamadım.


2
Neden takma ad olmak zorunda? Bir kabuk betiğine taşıyın ve onunla bitirin. Çoğu * ix tipi sistem $HOME/bin, PATHbugünlerde böyle bir dizininiz varsa koydu .
Warren Young

@WarrenYoung: Doğru, bu belirli örnek bir komut dosyası olabilir. Ancak, diğer şeyler için takma adları tercih ettiğim için cevabı hala bilmek istiyorum ve kesinlikle bununla karşılaşacağım. Sorunuzu "Bash neden bir şey bir komut dosyası olduğunda takma adları destekliyor" şeklinde genelleştirebilirim.
dotancohen

Neden inişli çıkışlı? Soruyu nasıl geliştirebilirim? Örnekler, başarısız denemeler ve hatta google üzerinde denediğim anahtar kelimeleri sağladım.
dotancohen

@dotancohen: Bence bunu ayrıca sormalısın. Burada kısmi bir cevap vereceğim: alias cdp="cd ~/projects". Bunu bir kabuk komut dosyasında yapamazsınız.
Warren Young

Yanıtlar:


11

Özel karakterlerin işlenmesini bastırmak için tek tırnak kullanın . Ayrıca olabilir kullanılan karakterler s. $

Karmaşık bir komut için, muhtemelen herhangi bir durumda bir işlev kullanmaktan daha iyidir, bu da kaçış gerektirmez ve okunması ve düzenlenmesi daha kolaydır:

svnbranch() {
    svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
}

Diğer adı tanımlayabileceğiniz her yerde bir işlev tanımlayabilirsiniz.


2
awkdesen alanı da var awk '/^Revision/{ print ...}' Bu durumda grep'e gerek yok.
Valentin Bajrami
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.