find : utiliser une fonction shell dans avec exec

Soit une fonction log() :

log() {
  echo "LOG : $1"
}

Si l’on souhaite l’utiliser directement dans le script, pas de problème :

simon@simon-daas:[~]: log "Hello, World"
LOG : Hello, World

Si l’on souhaite maintenant l’utiliser avec find -exec :

simon@simon-daas:[~]: find . -maxdepth 1 -type f -exec log '{}' \;
find: ‘log’: Aucun fichier ou dossier de ce type

On peux constater que les fonctions définies dans le shell en cours ne sont pas accessibles dans find, celui-ci exécutant la commande dans son propre contexte.

Il faut donc l’exporter pour pouvoir s’en servir :

simon@simon-daas:[~]: export -f log
simon@simon-daas:[~]: find . -maxdepth 1 -type f -exec sh -c 'log "$0"' '{}' \;
LOG : ./test.sh

Script complet :

#!/bin/sh
log() { echo "LOG : $1"; }
export -f log
find . -maxdepth 1 -type f -exec sh -c 'log "$0"' '{}' \;

Source : https://stackoverflow.com/questions/4321456/find-exec-a-shell-function#4321522

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s