Saya menggunakan Solaris 10 dan saya telah menguji yang berikut ini dengan ksh (88), bash (3.00) dan zsh (4.2.1).
Kode berikut tidak memberikan hasil apa pun:
function foo {
    echo "Hello World"
}
find somedir -exec foo ;
 Temuan itu cocok dengan beberapa file (seperti yang ditunjukkan dengan mengganti -exec ... dengan -print ), dan fungsinya bekerja dengan sempurna saat dipanggil di luar dari find panggilan.
 Inilah yang man find halaman mengatakan tentang -exec :
 -exec command       True if the executed command  returns  a
                     zero  value  as  exit status. The end of
                     command must be punctuated by an escaped
                     semicolon (;).  A command argument {} is
                     replaced by the current pathname. If the
                     last  argument  to  -exec  is {} and you
                     specify + rather than the semicolon (;),
                     the command is invoked fewer times, with
                     {} replaced by groups of  pathnames.  If
                     any  invocation of the command returns a
                     non-zero  value  as  exit  status,  find
                     returns a non-zero exit status.
 Saya mungkin bisa lolos melakukan sesuatu seperti ini:
for f in $(find somedir); do
    foo
done
Tapi saya takut berurusan dengan masalah pemisah bidang.
 Apakah mungkin untuk memanggil fungsi shell (didefinisikan dalam skrip yang sama, jangan repot-repot dengan masalah pelingkupan) dari find ... -exec ... telepon?
 Saya mencobanya dengan /usr/bin/find dan /bin/find dan mendapatkan hasil yang sama.
Jawaban yang Diterima:
 Sebuah function bersifat lokal untuk shell, jadi Anda perlu find -exec untuk menelurkan shell dan memiliki fungsi yang didefinisikan dalam shell itu sebelum dapat menggunakannya. Sesuatu seperti:
find ... -exec ksh -c '
  function foo {
    echo blan: "[email protected]"
  }
  foo "[email protected]"' ksh {} +
 bash memungkinkan seseorang untuk mengekspor fungsi melalui lingkungan dengan export -f , sehingga Anda dapat melakukannya (dalam bash):
foo() { ...; }
export -f foo
find ... -exec bash -c 'foo "[email protected]"' bash {} +
 ksh88 memiliki typeset -fx untuk mengekspor fungsi (bukan melalui lingkungan), tetapi itu hanya dapat digunakan oleh skrip she-bang yang lebih sedikit yang dieksekusi oleh ksh , jadi tidak dengan ksh -c .
Pilihan lain adalah melakukan:
find ... -exec ksh -c "
  $(typeset -f foo)"'
  foo "[email protected]"' ksh {} +
 Yaitu, gunakan typeset -f untuk membuang definisi foo fungsi di dalam skrip sebaris. Perhatikan bahwa jika foo menggunakan fungsi lain, Anda juga harus membuangnya.