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 find
chiamata.
Ecco cosa man find
dice 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/find
e /bin/find
ed 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