hallo zusammen.. kann mir jemand bei einem shell script helfen? Wiso funktioniert das nicht: #!/bin/bash function convert () { FILE=$1 echo "copy: $FILE" } find "$*" -type f -exec c {} \;
sorry, falscher code aber immer noch das selbe problem. wie bringe ich find dazu, die funktion convert für jede datei auszuführen? #!/bin/bash function convert () { FILE=$1 echo "copy: $FILE" } find "$*" -type f -exec convert {} \; On Fri, 2001-09-14 at 23:19, Yves Kurz wrote:
hallo zusammen..
kann mir jemand bei einem shell script helfen?
Wiso funktioniert das nicht:
#!/bin/bash
function convert () { FILE=$1 echo "copy: $FILE" }
find "$*" -type f -exec c {} \;
* Yves Kurz schrieb am 14.Sep.2001:
sorry, falscher code aber immer noch das selbe problem.
wie bringe ich find dazu, die funktion convert für jede datei auszuführen?
#!/bin/bash
function convert () { FILE=$1 echo "copy: $FILE" }
find "$*" -type f -exec convert {} \;
AFAIK ruft find nicht die shell auf sondern führt die Befehle selber aus, es kennt convert nicht. Möglichkeit: schreibe ein skript convert. Bernd -- Hast Du bei Problemen schon in der SuSE-Support-Datenbank (SDB) nachgesehen? Auf Deinem Rechner: http://localhost/doc/sdb/de/html/index.html | mit Apache: http://localhost/doc/sdb/de/html/key_form.html | Zufalls- Tagesaktuell bei SuSE: http://sdb.suse.de/sdb/de/html/index.html | signatur 2
Hallo Yves, * Yves schrieb:
wie bringe ich find dazu, die funktion convert für jede datei auszuführen?
#!/bin/bash
function convert () { FILE=$1 echo "copy: $FILE" }
find "$*" -type f -exec convert {} \;
find läuft in einem Kindprozess des Scriptes, dort gibt es aber die Funktion convert() nicht. Warum erzeugst du nicht erst das Ergebnis der Suche mit find und schmeisst das Suchergebnis dann der Funktion convert() vor? Problematisch finde ich übrigends auch das find-Konstrukt. "$*" übergibt sämtliche Parameter als ein String, während $@ die Parameter als einzelne Worte übergibt. Die Anführungszeichen müssen um $@ herum, damit's auch bei Namen mit Leerzeichen funktioniert. convert() { echo "copy: $1" } for i in `find "$@" -type f -print`; do convert $i done $1 in der Funktionsdeklaration ist übrigends der erste Parameter, der der Funktion übergeben wurde, nicht der erste Parameter, der dem Script übergeben wurde. Man kann also innerhalb der Funktion ruhig den Inhalt von $1 verändern, ausserhalb der Funktion gelten weiterhin die Positionsparameter, die dem Script übergeben wurden. Was genau hast du denn eigentlich mit dem Script vor? Warum suchst du mit find nach einer Datei, die sowieso im aktuellen Verzeichnis liegen muss, weil der find-Aufruf sonst nicht funktioniert? Gruß christian -- "Anstatt zu lachen bei einem Witz sagtst Du: ROTFL" Zu lange im Internet 4
On Friday 14 September 2001 23:19, you wrote:
hallo zusammen..
kann mir jemand bei einem shell script helfen?
Wiso funktioniert das nicht:
Du musst ein shell script dafür schreiben: find -exec führt ein ausführbares Programm aus (via execve(2)) und eine shell-funktion ist nur eine Ansammlungen von shell-Befehlen, die sich in der Shell wie ein Programm `anfühlt'. Also:
for i in `find $* -type f` ; do convert ; done
Oder besser gleich den Code von Convert einfügen:
for i in `find $* -type f` ; do echo "copy: $i" done
Aber Vorsicht: Das script kann dann nicht mit Dateien umgehen, die eine Lücke im Dateinamen haben, wie "strange file.txt". Lösung hier:
while read i ; do echo "copy: $i" done <<EOF `find $* -type f` EOF
Die bash ist unglaublich vielseitig. Wolly
* Wolly Wicyrek schrieb am 15.Sep.2001:
On Friday 14 September 2001 23:19, you wrote:
Wer ist you?
Du musst ein shell script dafür schreiben: find -exec führt ein ausführbares Programm aus (via execve(2)) und eine shell-funktion ist nur eine Ansammlungen von shell-Befehlen, die sich in der Shell wie ein Programm `anfühlt'.
mit execve kann man auch ein shellskript ausführen, vorausgesetzt die Zeile #!/bin/bash ist vorhanden. (muß zwingend die erste Zeile sein) Denn dann wird die shell aufgerufen, die die Interpretation ausführt. Der Punkt ist ein anderer: Diese shell kennt nicht die function, die in einer anderen definiert wurde. Bernd -- Welches Buch ist zu empfehlen? Schon mal bei SuSE vorbeigesehen? http://www.suse.de/de/produkte/buecher/index.html oder die Empfehlungen der SuSE-Entwickler auf dem eigenen Rechner? file:///usr/shar/doc/sdb/de/html/literatur.html |Zufallssignatur 5
participants (4)
-
B.Brodesser@t-online.de
-
Christian Schult
-
Wolly Wicyrek
-
Yves Kurz