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 find
llamada.
Esto es lo que man find
dice 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/find
y /bin/find
y 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