Parametre alan bir Bash takma adı oluşturun?

Eskiden CShell ([tag:csh]) kullanırdım, bu da parametre alan bir takma ad oluşturmanıza izin verir. Gösterim şöyle bir şeydi

alias junk="mv \\!* ~/.Trash"

Bash'te bu işe yaramıyor gibi görünüyor. Bash'in çok sayıda yararlı özelliğe sahip olduğu göz önüne alındığında, bunun uygulandığını varsayıyorum, ancak nasıl olduğunu merak ediyorum.

Çözüm

Bash takma adları doğrudan parametre kabul etmez. Bir fonksiyon oluşturmanız gerekecektir.

alias` parametre kabul etmez ancak bir fonksiyon tıpkı bir alias gibi çağrılabilir. Örneğin:

myfunction() {
    #do things with parameters like $1 such as
    mv "$1" "$1.bak"
    cp "$2" "$1"
}

myfunction old.conf new.conf #calls `myfunction`

Bu arada, .bashrc ve diğer dosyalarınızda tanımlanan Bash işlevleri kabuğunuzda komutlar olarak kullanılabilir. Örneğin önceki fonksiyonu şu şekilde çağırabilirsiniz

$ myfunction original.conf my.conf
Yorumlar (19)

Yukarıdaki cevabı geliştirerek, bir kabuk veya .bashrc dosyalarındaki geçici tanımlar için daha uygun olan takma adlar için yapabileceğiniz gibi 1 satırlık sözdizimi elde edebilirsiniz:

bash$ myfunction() { mv "$1" "$1.bak" && cp -i "$2" "$1"; }

bash$ myfunction original.conf my.conf

Sağ parantezi kapatmadan önce noktalı virgülü unutmayın. Benzer şekilde, asıl soru için:

csh% alias junk="mv \\!* ~/.Trash"

bash$ junk() { mv "$@" ~/.Trash/; }

Ya da:

bash$ junk() { for item in "$@" ; do echo "Trashing: $item" ; mv "$item" ~/.Trash/; done; }
Yorumlar (8)

İşte ~/.bashrc dosyamda bulunan ve bir parametre kabul eden esasen takma adlar olan üç işlev örneği:

#Utility required by all below functions.
#https://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-bash-variable#comment21953456_3232433
alias trim="sed -e 's/^[[:space:]]*//g' -e 's/[[:space:]]*\$//g'"

.


:
Yorumlar (6)