Estoy en Solaris 10 y he probado lo siguiente con ksh (88), bash (3.00) y zsh (4.2.1).
El siguiente código no produce ningún resultado:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
El hallazgo coincide con varios archivos (como se muestra al reemplazar -exec ...con -print), y la función funciona perfectamente cuando se llama fuera de la findllamada.
Esto es lo que man finddice la página -exec:
-exec comando True si el comando ejecutado devuelve un
valor cero como estado de salida. El fin de
el comando debe ser puntuado por un escape
punto y coma (;). Un argumento de comando {} es
reemplazado por la ruta actual. Si el
El último argumento para -exec es {} y usted
especifique + en lugar del punto y coma (;),
el comando se invoca menos veces, con
{} reemplazado por grupos de nombres de ruta. Si
cualquier invocación del comando devuelve un
valor distinto de cero como estado de salida, buscar
devuelve un estado de salida distinto de cero.
Probablemente podría escapar haciendo algo como esto:
for f in $(find somedir); do
foo
done
Pero tengo miedo de lidiar con los problemas de separación de campos.
¿Es posible llamar a una función de shell (definida en el mismo script, no nos molestemos con problemas de alcance) desde una find ... -exec ...llamada?
Lo he probado con ambos /usr/bin/findy /bin/findy obtuve el mismo resultado.
PATH. Alternativamente, use sh -c '...'y ambos definan Y ejecuten la función en el ...bit. Puede ser útil comprender las diferencias entre funciones y scripts .
export -f foo