Sono su Solaris 10 e ho testato quanto segue con ksh (88), bash (3.00) e zsh (4.2.1).
Il seguente codice non produce alcun risultato:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
La ricerca corrisponde a diversi file (come mostrato sostituendo -exec ...con -print) e la funzione funziona perfettamente quando viene chiamata all'esterno della findchiamata.
Ecco cosa man finddice la pagina su -exec:
-exec command True se il comando eseguito restituisce a
valore zero come stato di uscita. La fine di
Il comando deve essere punteggiato da un escape
punto e virgola (;). Un argomento di comando {} è
sostituito dal percorso corrente. Se la
l'ultimo argomento di -exec è {} e tu
specificare + anziché il punto e virgola (;),
il comando viene richiamato meno volte, con
{} sostituito da gruppi di percorsi. Se
qualsiasi invocazione del comando restituisce a
valore diverso da zero come stato di uscita, trova
restituisce uno stato di uscita diverso da zero.
Probabilmente potrei andare via facendo qualcosa del genere:
for f in $(find somedir); do
foo
done
Ma ho paura di affrontare i problemi di separazione dei campi.
È possibile chiamare una funzione shell (definita nello stesso script, non preoccupiamoci dei problemi di scoping) da una find ... -exec ...chiamata?
Ho provato sia con /usr/bin/finde /bin/finded ho ottenuto lo stesso risultato.
PATH. In alternativa, utilizzare sh -c '...'ed entrambi definire AND eseguire la funzione nel ...bit. Può aiutare a comprendere le differenze tra funzioni e script .
export -f foo