Wie rufe ich ein Script mit übergabeParam aus einem anderen auf?

Michi0209

Michi0209

Mitglied
Hallo zusammen,

ich habe ein script geschrieben, in dem ich den ordnerinhalt nach einer bestimmten Datei durchsuche und diese dann bearbeit. Nun habe ich aber einen "Hauptordner" in dem ca. 500 solcher Unterordner vorhaden sind.

Wie bekomme ich es nun hin, diesen Hauptordner einmal komplett zu durchlaufen und für sämtliche unterordner das shell-script aufzurufen.

bis jetzt habe ich nur folgendes:

Code:
#! /bin/sh

clear

FILE=$HOME/cw_source

cd "$FILE"

 find . -type d  -maxdepth 1 -exec  " !!hier sollte das script aufgerufen werden!!!   \; -print


Danke für jeden Tip!
 
Zuletzt bearbeitet:
Oh, sorry!! Du hast natürlich recht!
 
Zuletzt bearbeitet:
Hallo
Sorry, aber deine Frage versteh ich nicht richtig.
Was macht das zu startende Script?
Erwartet es Parameter?
Sucht das Script selbst in den Verteichnissen?
Wenn ja, dann kannst du doch gleich dein geamtes Script in eine Schleife packen.
Wenn du eine bestimmte Datei nach z.B. Namen suchst, und diese dann bearbeitest:
Code:
for I in $(find /pfad -name "name"); do
cat $I;
#sed grep oder was du halt machen willst- halt dein code
done

Oder erläutere mal genauer um was es geht.

Gruß Wolfgang
 
okay, dann versuche ich es mal ausführlicher zu erläutern....

Folgende Struktur:

source |
|
->Projekt1
->Projekt2
.... usw.

nun habe ich ein script geschrieben, das ein Parameter erwartet. Dieser Parameter ist der jeweilige Projektordner. In diesem Fall wäre das "Projekt1". Das script läuft nun durch dieses Verzeichnis "Projekt1" und arbeitet dort einige Operationen durch....

Nun möchte ich aber ein zweites script schreiben, das es mir ermöglicht durch das "source" Verzeichniss zu laufen und hier bei jedem Ordner das 1 script mit dem jeweiligen Ordnernamen aufzuruft.

Ich hoffe das ist jetzt etwas klar, was ich hier versuche zu machen... wahrscheinlich sehe ich vor lauter Bäumen den Wald nicht mehr ;)
 
Hallo
Wenn es nur eine Ebene sein soll, und die Prozesse einzeln gestartet werden sollen:
Code:
for I in $(find /pfad/source -type d -maxdepth 1 ); do
skript2.sh $I;
done

Natürlich musst du den Pfad zum Script anpassen. Dein Script muss dann den übergebenen Parameter ($1) verarbeiten.
Es geht aber auch mit Pipe und xargs, was bei vielen Verzeichnissen ratsam ist.
Code:
find /pfad/source -type d -maxdepth 1 |xargs -n1 script2.sh
Das sind nur zwei von vielen Möglichkeiten.
Gruß Wolfgang
 
Danke für deine Antwort Wolfgang, aber anscheinend bin ich zu doof....

bekommen immer folgenden Fehler: xargs: /Users/Michael/svn_import.sh: Permission denied


das ist mein svn_import_all.sh script. Es liegt direkt auf dem Michael-Werzeichniss.
Code:
#! /bin/sh

clear

FILE=$HOME/cw_source

cd "$FILE"

 find $FILE -type d -maxdepth 1 |xargs -n1 $HOME/svn_import.sh

...das svn_import_all.sh sollte jetzt das svn_import.sh aufrufen. auch dieses befindet sich im gleichen Verzeichniss und sieht so aus:

Code:
#! /bin/sh

clear

Uebergabe=$*

if [ $# -ne 1 ]
then   echo "Bitte immer nur ein Projekt importieren!!!"
       echo "------------------------------------------"
  exit 1
fi


FILE=$HOME/cw_source/$Uebergabe

cd "$FILE"

# DEBUG
###############################
echo Projekt zum import: $Uebergabe
echo Verzeichnis: "$FILE"

Kann mir bitte jemand sagen was nun am ersten script falsch ist und was ich ändern muß!?!

Danke Michael
 
Ist /Users/Michael/svn_import.sh ausführbar und hast Du die Rechte dafür? Btw, was für ein Unix-System hast Du?

Gruss, Xanti

edit: find übergibt die gefundenen Files mit vollem Pfad, was Problem in Deinem Skript ergibt, da Du hier

Code:
FILE=$HOME/cw_source/$Uebergabe

nochmal einen Pfad voranhängst. Vielleicht solltest Du mit basename arbeiten, wenn Du Dein Skript nicht ändern willst.
 
Zuletzt bearbeitet:
Hallo,

ich habe vor 3 Tagen angefangen mit dieser scriptsprache und stehe dementsprechend ganz weit am anfang...

ich arbeite auf meinem mac mit dem terminal?! wieso was ist damit?
 
Michi0209 schrieb:
Hallo,

ich habe vor 3 Tagen angefangen mit dieser scriptsprache und stehe dementsprechend ganz weit am anfang...

ich arbeite auf meinem mac mit dem terminal?! wieso was ist damit?

Nix, es könnte halt 'ne andere Syntax haben. Du hast trotzdem noch nicht die erste Frage beantwortet: ist es ausführbar? ;)
 
das svn_import.sh ist ausführbar, ja!

nur das svn_import_all.sh funktioniert nicht!
 
Michi0209,

die Fehlermeldung ist eigentlich eindeutig und Xanti hat völlig Recht:
xargs: /Users/Michael/svn_import.sh: Permission denied
Die Fehlermeldung kommt von xargs und besagt, dass der ausführende Benutzer ein bestimmtes Zugriffsrecht auf diese Datei nicht hat. Es kann sich in diesem Fall nur um das Ausführungsrecht handeln. Bist Du sicher, dass das Skript für diesen Benutzer ausführbar ist?
Ich könnte schwören, dass Xanti Recht hat!

Gruß
 
Hallo

Ausserdem sieht die Shebang recht merkwürdig aus.
Also versuch es mal ohne das Leerzeichen da drin.
Lass dir auch mal beim Testen anzeigen, was dein erstes Script an das zweite übergibt.
Also statt deinem zweiten Scriptaufruf einfach mal mit echo durchlaufen lassen.
Dann wird dir klarer, was Xanti mit basename meinte.

Starte mal dein zweites Script zu Fuß. Das sollte nur gehen, wenn es ausführbar ist.

Gruß Wolfgang
 
Hast Du strace installiert?

Wenn ja, starte das mal bitte so:

Code:
prompt:~ # strace ./svn_import_all.sh 2>/tmp/trace.txt

und poste mal das Ende des trace (vielleicht als Attachment). Vielleicht kann man was erkennen.

Gruß
 
ne, das habe ich nicht installiert!

ist ein sauberes osx 10.4.7
 
Hallo
Unter welchem user läuft das script?
Wie sehen die Rechte genau aus? ls -l script

Wolfgang
 
-rw-rw-rw- 1 Michael Michael 2395 Jun 30 11:15 svn_import.sh
 
Michi0209 schrieb:
-rw-rw-rw- 1 Michael Michael 2395 Jun 30 11:15 svn_import.sh

Wie gesagt, das File ist nicht ausführbar. Dies erreicht man durch

Code:
chmod +x svn_import.sh

Ausserdem rate ich Dir die dringends folgende Lektüre http://www.selflinux.org/selflinux/html/bash_basic.html sowie das Handbuch zu Deinem OS, da Dir grundlegende Basics fehlen. Die Hälfte des Threads hätte man sich dann sparen können. ;)

Gruss, Xanti
 
r = read
w = write
x = execute

Von x sehe ich da aber nichts.
 

Ähnliche Themen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Hilfe bei backup-script

perl script, das Dateien aus einer Liste löscht

Zeilenweise suchen, löschen und ersetzen / Inhalt einfügen

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Zurück
Oben