it-swarm-tr.com

Parametreleri bir takma ada nasıl aktarabilirim?

Bash betiği için "[email protected]" bağımsız değişkenlere erişmek için. Takma ad kullandığımda eşdeğerim nedir?

77
prosseek

Takma adlar, komutlara benzerler; bunlara yapılan tüm bağımsız değişkenler, diğer adlarına program olarak bağımsız değişkenler olarak iletilir. Örneğin, ls - ls -la, ardından ls foo bar - gerçekten yürütür ls -la foo bar komut satırında.

Bağımsız değişkenlerin nasıl yorumlandığı üzerinde gerçek bir denetime sahip olmak istiyorsanız, şöyle bir işlev yazabilirsiniz:

my_program_wrapper() {
    local first_arg="$1" \
          second_arg="$2"

    shift 2               # get rid of the first two arguments

    # ...

    /path/to/my_program "[email protected]"
}
54
amphetamachine

Takma ad çözümü

Gerçekten kendi başınıza bir işlev kullanmaya karşı çıkıyorsanız, şunları kullanabilirsiniz:

$ alias wrap_args='f(){ echo before "[email protected]" after;  unset -f f; }; f'
$ wrap_args x y z
before x y z after

[email protected] ile $1 sadece ilk argümanı istiyorsanız.

açıklaması

Bu, bağımsız değişkenlerden geçirilen f geçici bir işlev oluşturur.

Takma ad bağımsız değişkenleri yalnızca sonunda iletilir. Diğer adın en sonuna f çağrıldığını unutmayın.

unset -f, takma ad yürütüldükten sonra işlev tanımını kaldırır, böylece daha sonra takılmaz.

34
Tom Hale

Mevcut cevaplara ek olarak, takma adların nasıl çalıştığını anlamak için önemli bir şey, takma bir komuttan sonra yazdığınız tüm parametrelerin sonunda kelimenin tam anlamıyla kullanılacağıdır. Bu nedenle, iki komut için diğer adı kullanmanın bir yolu yoktur (borulu veya değil), bunlardan ilki parametreleri yorumlamalıdır. Açıkça belirtmek gerekirse, beklendiği gibi çalışmayacak bir şey örneği:

alias lsswp="ls -l | grep swp"

( bu sor esinlenerek bir örnek bu her zaman ls -l current dizininde gerçekleştirildi ve üzerinde bir grep yapın - böylece

lsswp/tmp /

ls -l | grep swp /tmp/ ve değil ls -l /tmp/ | grep swp.

Bağımsız değişkenlerin ortada bir yerde kullanılması gereken tüm amaçlar için, function yerine alias kullanılması gerekir.

19
rozcietrzewiacz

Aslında hiçbir şey yapmanıza gerek yok; takma adlar bunu otomatik olarak yapar. Örneğin:

$ alias less="less -eirqM"
$ less foo.txt

Foo.txt'nin ilk sayfasını göreceksiniz ve less EOF (-e) adresinden çıkacak, aramalar büyük/küçük harfe duyarlı olmayacak (-i) vb.

15
Warren Young

Csh için cevap veriyorum:

Evet, parametreleri takma adlarda kullanabilir ve - yukarıda söylenenlerden farklı olarak - yalnızca sonunda değil, takma ad tanımında herhangi bir yere başvurabilirsiniz.

Tar-gz -ing bir şey örneği:

$ alias tgz "tar cvf - \!:1 | gzip -9 > \!:2.tar.gz"

, nerede !:1 ve !:2 takma adınızı çağırırken sağlayacağınız parametrelerdir.

Kullanım örneği:

    $ ls
    clrcf.dat                             user_comment_2016.06.03_12:51:50.txt  user_comment_2016.06.03_12:54:48.txt
        TEST-wADM.tec                         user_comment_2016.06.03_12:52:04.txt  user_comment_2016.06.03_12:55:13.txt


    $ tgz user* out
    a user_comment_2016.06.03_12:51:50.txt 1K
a user_comment_2016.06.03_12:52:04.txt 1K
a user_comment_2016.06.03_12:54:48.txt 1K
a user_comment_2016.06.03_12:55:13.txt 1K

    $ ls out*
    out.tar.gz

Bu, tar komutunun rastgele yerlerine eklediğiniz iki parametreyi kullandığınız ve bunların tümünü bir takma ad haline getirdiğiniz anlamına gelir tgz

1
stevica