find -exec auf Shellfunktion?

08/07/2008 - 16:47 von Torsten Fleischmann | Report spam
Hi,

Das hier:

,-
| funktion abc ()
| {
| ...
| }
|
| find ... -exec abc {} \;
`-

bringt

,-
| find: "abc": Datei oder Verzeichnis nicht gefunden
`-

Hat da jemand eine Lösung (auser die Funktion in ein seperates Script
auszulagern).

Tschüß,

Torsten
 

Lesen sie die antworten

#1 Hauke Laging
08/07/2008 - 18:14 | Warnen spam
Torsten Fleischmann schrieb am Dienstag 08 Juli 2008 16:47:

| find ... -exec abc {} \;

| find: "abc": Datei oder Verzeichnis nicht gefunden
`-

Hat da jemand eine Lösung (auser die Funktion in ein seperates
Script auszulagern).



So was wie:
find ... -exec bash -c "abc $1" bash {} \;

Analog zu
:~> bash -c 'foo () { echo $1;}; foo "$1"' bash foo
foo

Natürlich muss die Funktion dafür irgendwie in der aufgerufenen Shell
bekannt sein. Das bringt wohl nur dann was, wenn das in den
Startdateien passiert; sonst könnte man die Funktion ja gleich im
Script aufrufen.


Oder man geht den ganz üblen Umweg über einen FIFO (nicht getestet,
nur so 'ne Idee):

find ... -print0 | xargs -0 -r -L 1 bash -c 'echo -n "$1" >/fifo'
bash &
pid=$!
while /bin/ps -p $pid &>/dev/null
do
argument="$(cat /fifo;echo x)"
argument="${argument%x}"
abc "argument"
done

Durch den Umweg über bash -c kann man dafür sorgen, dass der Zugriff
auf den FIFO nach jedem Pfad abgebrochen wird, so dass der
auslesende Prozess die Grenzen erkennen kann. Aber wie gesagt,
Theorie :-)


CU

Hauke
http://www.hauke-laging.de/ideen/
http://zeitstempel-signatur.hauke-laging.de/
Wie können 59.054.087 Leute nur so dumm sein?

Ähnliche fragen