Saya menggunakan Solaris 10 dan saya telah menguji yang berikut dengan ksh (88), bash (3.00) dan zsh (4.2.1).
Kode berikut tidak menghasilkan hasil apa pun:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
Temuan tidak cocok dengan beberapa file (seperti yang ditunjukkan dengan mengganti -exec ...
dengan -print
), dan fungsinya berfungsi dengan baik ketika dipanggil di luar dari find
panggilan.
Inilah yang dikatakan man find
laman tentang -exec
:
-exec command Benar jika perintah yang dijalankan mengembalikan a nilai nol sebagai status keluar. Akhir dari perintah harus diselingi oleh yang melarikan diri titik koma (;). Argumen perintah {} adalah diganti dengan pathname saat ini. Jika argumen terakhir ke -exec adalah {} dan Anda tentukan + daripada tanda titik koma (;), perintah dipanggil lebih sedikit, dengan {} digantikan oleh grup nama path. Jika setiap pemanggilan perintah mengembalikan a nilai bukan nol sebagai status keluar, temukan mengembalikan status keluar bukan nol.
Saya mungkin bisa melakukan sesuatu seperti ini:
for f in $(find somedir); do
foo
done
Tapi saya takut berurusan dengan masalah pemisah lapangan.
Apakah mungkin untuk memanggil fungsi shell (didefinisikan dalam skrip yang sama, jangan repot-repot dengan masalah pelingkupan) dari find ... -exec ...
panggilan?
Saya mencobanya dengan keduanya /usr/bin/find
dan /bin/find
dan mendapatkan hasil yang sama.
PATH
. Atau, gunakan sh -c '...'
dan keduanya mendefinisikan DAN menjalankan fungsi dalam ...
bit. Mungkin membantu untuk memahami perbedaan antara fungsi dan skrip .
export -f foo