Aliasing grep dalam opsi -exec find
Saya memiliki alias ini di saya ~/.bashrc
alias grep='grep --color=auto -H'
alias fgrep='fgrep --color=auto -H'
alias egrep='egrep --color=auto -H'
tetapi tidak berpengaruh saat saya menjalankannya find ... -exec grep ..., dan saya selalu harus menyediakan opsi tersebut secara manual.
Adakah cara untuk mengetahui finduntuk mengandalkan alias dalam -execargumen opsi? Saya sedang memikirkan file konfigurasi, daripada alias lainnya.
Apakah itu tidak aman dalam beberapa hal?
Jawaban
Anda tidak dapat menggunakan alias seperti itu. Alias hanya berfungsi jika digunakan pertama kali dalam urutan perintah yang panjang, shell pada dasarnya menggantikan teks alias dengan perintah sebenarnya. Saat Anda memasukkan perintah, shell pertama mencari alias, lalu fungsi, dan seterusnya. Substitusi perintah / substitusi alias tidak berfungsi jika Anda menggunakan alias di tengah urutan perintah.
Selain itu, -execbendera find, akan selalu menelurkan proses terpisah yang menjalankan biner, bukan alias, atau pun fungsi, yang diberi kode keras.
Beberapa shell memungkinkan alias diperluas di mana saja di baris perintah - misalnya, zshmemiliki konsep alias global ,alias -g 'grep=grep --color=auto -H'
Namun, jika shell interaktif Anda adalah bash, alias hanya diperluas ketika muncul sebagai kata pertama dari sebuah perintah, jadi Anda perlu membungkus greppanggilan dalam shell, dan memanggil shell dengan cara yang menyebabkan ~/.bashrcfile Anda dibaca, seolah-olah dalam sesi shell interaktif.
Sebagai contoh
find . -name '*.txt' -exec bash -ic 'for f do grep foo "$f"; done' find-bash {} +
AFAIK tidak berbahaya sama sekali - namun memiliki beberapa overhead dan hampir tidak lebih nyaman daripada hanya menyediakan opsi yang diinginkan untuk grep secara langsung.