bagaimana cara menempatkan argumen saya ke perintah alias Bash?

3

saya biasanya memiliki alias sederhana berikut di bashrc saya:

alias g="grep --color=always --exclude-dir=\*.svn\*"

tapi sekarang saya harus bekerja pada sistem yang hanya memiliki GNU grep 2.5, karenanya tidak --exclude-dir argumen.

sekarang saya perlu sesuatu seperti ini untuk bekerja:

alias g="grep --color=always $1 $2 | grep -v .svn"

tapi tentu saja, argumennya ditambahkan ke akhir alias. $ 1 dan $ 2 diuraikan ketika alias dibuat bukan saat dipanggil, bahkan dengan kutipan kuat.

Bisakah saya menyelesaikannya tanpa menggunakan skrip atau fungsi tambahan?

gcb
sumber

Jawaban:

7

Tidak, kamu tidak bisa. Seperti yang dinyatakan oleh manual bash:

Tidak ada mekanisme untuk menggunakan argumen dalam teks pengganti, seperti dalam `csh '. Jika diperlukan argumen, fungsi shell harus digunakan (* note Shell Shell Functions: :).

Fungsi adalah hal yang tepat untuk ini, dan dapat dengan mudah ditulis sebagai alias. Dalam hal ini, bisa jadi

function g () { grep --color=always "$1" "$2" | grep -v .svn ; }
Alan Shutko
sumber
2
+1 Lebih aman untuk mengutip posisi params.
glenn jackman
Sangat benar. Diedit untuk memperbaikinya.
Alan Shutko