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ış find
aramadan çağrıldığında mükemmel çalışıyor .
İşte man find
sayfanı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/find
ve /bin/find
aynı 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