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 findpanggilan.
Inilah yang dikatakan man findlaman 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/finddan /bin/finddan 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