Solaris 10'dayım ve aşağıdakileri ksh (88), bash (3.00) ve zsh (4.2.1) ile test ettim.
Aşağıdaki kod hiçbir sonuç vermedi:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
Bulma, birkaç dosyayla eşleşiyor ( -exec ...ile değiştirilerek gösterildiği gibi -print) ve işlev dış findaramadan çağrıldığında mükemmel çalışıyor .
İşte man findsayfanın söyledikleri -exec:
-exec komutu Eğer çalıştırılan komut bir dönerse doğru
çıkış durumu olarak sıfır değeri. Sonu
komut kaçan bir kişi tarafından kesilmek zorundadır
noktalı virgül (;). Bir komut argümanı {}
geçerli yol adıyla değiştirildi. Eğer
-exec'in son argümanı {} ve sizsiniz.
noktalı virgül (;) yerine + belirtin,
komut, birkaç kez çağrılır
{}, yol adları grubuyla değiştirildi. Eğer
komutun herhangi bir çağrısı bir
çıkış durumu olarak sıfır olmayan değeri bulun
sıfır olmayan bir çıkış durumu döndürür.
Muhtemelen böyle bir şey yapmaktan kurtulabilirdim:
for f in $(find somedir); do
foo
done
Ancak alan ayırıcı konularla uğraşmaktan korkuyorum.
Bir çağrıdan bir kabuk işlevini çağırmak mümkün mü (aynı komut dosyasında tanımlanmış, kapsam belirleme sorunlarıyla uğraşmayalım) find ... -exec ...?
Ben ikisi ile denedim /usr/bin/findve /bin/findaynı sonucu var.
PATH. Alternatif olarak, sh -c '...'işlevi kullanın ve her ikisi de ...bit içindeki işlevi AND çalıştırın . İşlevler ve komut dosyaları arasındaki farkları anlamanıza yardımcı olabilir .
export -f foo