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' find
appel.
Voici ce que dit la man find
page -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/find
et /bin/find
et 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