'Ve "içeren bir komutla takma ad oluşturma


10

Birkaç yayın önce birisi hafızayı yüzde olarak nasıl göstereceğini sordu. Birisi şu yanıtı verdi:

free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'

Bu komutu ~ / .bashrc içinde bir diğer ad haline getirip getiremeyeceğimi merak ediyordum. Ancak takma adın sözdizimi:

alias aliasname='command'

Bunu nasıl yapabilirim? Bu komut hem 've öğelerini içerir ". Farklı yollar denedim, ama işe yaramadı. Bu mümkün mü? Bir şey mi kaçırıyorum?


5
Cehennemden alıntı yapmaktan kaçınmak için bu gibi durumlarda sadece bir fonksiyon tanımlamak daha kolay olabilir.
nohillside

1
@nohillside işlevleri genellikle daha yararlı / güçlüdür
D. Ben Knoble

1
aliasname() { free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'; }- hala sadece bir satır, hiçbir değişiklik / kaçış / vb hiçbir değişiklik gerekli. Freenode #bash kanalı bir sebebi var !aliasfactoid (iyi olduğunu edildi :, ama factoid bot hayatının en bazı varyant için) sormak varsa, bunun yerine bir fonksiyonu kullanmak .
Charles Duffy

Yanıtlar:


8

Gerekenler:

alias aliasname="free | awk '/^Mem/ { printf(\"free: %.2f %\n\", \$4/\$2 * 100.0) }'"

Her iki kaçmak gerektiğini Bildirim "ve $.


17

Bir takma adın sözdiziminin alias aliasname='command'biraz yanıltıcı olduğunu söylemek, tek tırnakların sözdiziminin bir parçası olduğu anlamına gelir. Onlar değil. Eşittir işaretinden sonraki bölüm, değişken atamalara benzer, çünkü düz karakterlerden (tırnak işaretleri olmadan) veya tırnak içine alınmış bir dizeden veya bir kombinasyondan oluşan herhangi bir kabuk sözcüğü olabilir .

Bunların hepsi geçerli ve son üç eşdeğeri:

alias ks=ls
alias ls='ls -l'
alias ls="ls -l"
alias ls=ls\ -l

Yani, tek yapmanız gereken tırnak takma değerinin içinde olması için tırnak işaretlerinden kaçmaktır.

Bkz. Örneğin bu cevap ve bununla ilgili tartışma için örneğin bu soruya verilen diğer cevaplar:

Veya, tırnak işaretlerinden tamamen kurtulmak için bir takma ad yerine işlevi kullanın:

freemem() {
    free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'
}
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.