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 findAnruf.
Hier ist, was die man findSeite 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/findund versucht /bin/findund 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