Je suis sur Solaris 10 et j'ai testé les éléments suivants avec ksh (88), bash (3.00) et zsh (4.2.1).
Le code suivant ne donne aucun résultat:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
La recherche correspond à plusieurs fichiers (comme indiqué en remplaçant -exec ...par -print), et la fonction fonctionne parfaitement lorsqu'elle est appelée en dehors de l' findappel.
Voici ce que dit la man findpage -exec:
-exec, commande True si la commande exécutée renvoie un
valeur zéro comme état de sortie. La fin de
la commande doit être ponctuée par un échappé
point-virgule (;). Un argument de commande {} est
remplacé par le chemin d'accès actuel. Si la
le dernier argument de -exec est {} et vous
spécifiez + plutôt que le point-virgule (;),
la commande est invoquée moins de fois, avec
{} remplacé par des groupes de chemins d'accès. Si
toute invocation de la commande renvoie un
valeur non nulle comme état de sortie, rechercher
renvoie un état de sortie différent de zéro.
Je pourrais probablement m'en tirer en faisant quelque chose comme ça:
for f in $(find somedir); do
foo
done
Mais j'ai peur de traiter des problèmes de séparateur de champs.
Est-il possible d'appeler une fonction shell (définie dans le même script, ne nous soucions pas des problèmes de portée) à partir d'un find ... -exec ...appel?
Je l' ai essayé avec les deux /usr/bin/findet /bin/findet a obtenu le même résultat.
PATH. Alternativement, utilisez sh -c '...'et définissez ET exécutez la fonction dans le ...bit. Il peut être utile de comprendre les différences entre les fonctions et les scripts .
export -f foo