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?

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 ; }

2
+1 Lebih aman untuk mengutip posisi params.
— glenn jackman

Sangat benar. Diedit untuk memperbaikinya.
— Alan Shutko
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.