Ich bin auf Solaris 10 und habe Folgendes mit ksh (88), bash (3.00) und zsh (4.2.1) getestet.
Der folgende Code liefert kein Ergebnis:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
Der Fund hat mehrere Dateien entspricht (wie durch Ersetzen gezeigt -exec ...
mit -print
), und der Funktion funktioniert perfekt , wenn außerhalb von dem gerufenen find
Anruf.
Hier ist, was die man find
Seite sagt -exec
:
-exec Befehl True, wenn der ausgeführte Befehl a zurückgibt Nullwert als Ausgangsstatus. Das Ende von Befehl muss durch ein Escapezeichen unterbrochen werden Semikolon (;). Ein Befehlsargument {} ist ersetzt durch den aktuellen Pfadnamen. Wenn das Das letzte Argument für -exec ist {} und Sie Geben Sie + anstelle des Semikolons (;) an. Der Befehl wird mit weniger Male aufgerufen {} ersetzt durch Gruppen von Pfadnamen. Ob Jeder Aufruf des Befehls gibt a zurück Nicht-Null-Wert als Exit-Status, finden Gibt einen Exit-Status ungleich Null zurück.
Ich könnte wahrscheinlich mit etwas davonkommen:
for f in $(find somedir); do
foo
done
Aber ich habe Angst, mich mit Feldtrennungsproblemen zu befassen.
Ist es möglich, eine Shell-Funktion (definiert im selben Skript, kümmern wir uns nicht um das Scoping) von einem find ... -exec ...
Aufruf aus aufzurufen?
Ich habe es mit beiden /usr/bin/find
und versucht /bin/find
und habe das gleiche Ergebnis erzielt.
PATH
. Alternativ können Sie mit sh -c '...'
und beide definieren UND die Funktion im ...
Bit ausführen . Es kann hilfreich sein, die Unterschiede zwischen Funktionen und Skripten zu verstehen .
export -f foo