Alih-alih, ubah "gi" menjadi skrip
misalnya, di /home/$USER/bin/gi
:
#!/bin/sh
exec /bin/grep -i "[email protected]"
jangan lupa untuk menandai file yang dapat dieksekusi.
Saran di sini adalah untuk menghindari xargs dan menggunakan loop "while read" daripada xargs:
find -name \*bar\* | while read file; do gi foo "$file"; done
Lihat jawaban yang diterima di tautan di atas untuk penyempurnaan guna menangani spasi atau baris baru dalam nama file.
Alias khusus untuk shell - dalam hal ini, kemungkinan besar khusus untuk bash. Untuk mengeksekusi alias, Anda perlu mengeksekusi bash, tetapi alias hanya dimuat untuk shell interaktif (lebih tepatnya, .bashrc
hanya akan dibaca untuk shell interaktif).
bash -i menjalankan shell interaktif (dan sources .bashrc).bash -c cmd menjalankan cmd .
Gabungkan keduanya:bash -ic cmd menjalankan cmd dalam shell interaktif, di mana cmd dapat berupa fungsi/alias bash yang ditentukan dalam .bashrc
Anda .
find -name \*bar\* | xargs bash -ic gi foo
harus melakukan apa yang Anda inginkan.
Sunting:Saya melihat Anda menandai pertanyaan sebagai "tcsh", jadi solusi khusus bash tidak berlaku. Dengan tcsh, Anda tidak memerlukan -i
, seperti yang terbaca .tcshrc kecuali Anda memberikan -f
.
Coba ini:
find -name \*bar\* | xargs tcsh -c gi foo
Ini berhasil untuk pengujian dasar saya.