Script aus Script ausführen

R

Reen_sc

Jungspund
Hallo,

habe da ein kleines Prob. Und zwar möchte ich aus einem Bash Script ein anderes aufrufen. Mit absoluten Pfaden funktionioniert das, aber wie mache ich das mit relativen?

Alle Scripte befinden sich im selben Ordner. Führe ich das oberste Script aus dem Verzeichnis aus, in welchen sich alle Scripte befinden, funktioniert das ohne Probs.

Führe ich das oberste Script aus einem anderem Verzeichnis aus, wird auch das Unterscript versucht in diesem Fremdverzeichnis zu starten.

Wie mache ich quasi dem obersten Script bei Aufruf des unteren klar, dass sich dieses im gleichen Verzeichnis befindet???


Vielen Dank
 
Abend,

die Stichworte, welche du Suchst sind "working directory" bzw der Suchpfad in der PATH-Variable
Wenn du deine Skripte mit "./skirptname" startest weißt du deine Shell an, im aktuellen working direcotry nach einem Ensprechenden Skriptnamen zu suchen und diesen zu starten. Das Funktioniert, wie du schon festgestellt hast nur, wenn du im richtigen Verzeichnis bist.
Wenn du deine Skripte mit "skriptname" startest wird deine Shell versuchen den Befehl im Suchpfad der in der PATH-Variablen hinterlegt ist zu suchen.

Zur Veranschaulichung ein paar Dummy-Skripte


Alle Skripte liegen unter "~/skriptEcke/unixboard/workingdir"

Code:
# Dummyskript das aufgerufen wird
headcrash@atlantis:~/skriptEcke/unixboard/workingdir$ cat uhrzeit
date

Code:
# Unser Skript, das nur dann funktioniert, 
# wenn wir im Selbenverzeichnis sind wie das Skript
headcrash@atlantis:~/skriptEcke/unixboard/workingdir$ cat testskript
pwd
./uhrzeit

headcrash@atlantis:~/skriptEcke/unixboard/workingdir$ ./testskript
/home/headcrash/skriptEcke/unixboard/workingdir
Di 15. Feb 19:01:28 CET 2011

# Wechsel in ein anderes Verzeichnis
headcrash@atlantis:~/skriptEcke/unixboard/workingdir$ cd ..

headcrash@atlantis:~/skriptEcke/unixboard$ workingdir/testskript
/home/headcrash/skriptEcke/unixboard
workingdir/testskript: line 2: ./uhrzeit: Datei oder Verzeichnis nicht gefunden
Hat wie erwartet nur im Skriptverzeichnis "workingdir" funktioniert.

Code:
# CD in das Skriptverzeichnis
headcrash@atlantis:~/skriptEcke/unixboard/workingdir$ cat testskript2
pwd
cd /home/headcrash/skriptEcke/unixboard/workingdir
pwd
./uhrzeit

headcrash@atlantis:~/skriptEcke/unixboard/workingdir$ ./testskript2
/home/headcrash/skriptEcke/unixboard/workingdir
/home/headcrash/skriptEcke/unixboard/workingdir
Di 15. Feb 19:01:34 CET 2011

# Wechsel in ein anderes Verzeichnis
headcrash@atlantis:~/skriptEcke/unixboard/workingdir$ cd ..

headcrash@atlantis:~/skriptEcke/unixboard$ workingdir/testskript2
/home/headcrash/skriptEcke/unixboard
/home/headcrash/skriptEcke/unixboard/workingdir
Di 15. Feb 19:01:50 CET 2011
Hier sind wir im Hauptskript mit dem "cd" in das Skriptverzeichnis zurück gesprungen, deshalb funktioniert hier der Aufruf des Unterskripts mit "./uhrzeit"

Code:
# Anpassen der PATH-Variable
headcrash@atlantis:~/skriptEcke/unixboard/workingdir$ cat testskript3
pwd
PATH=/home/headcrash/skriptEcke/unixboard/workingdir:$PATH
echo $PATH
uhrzeit
######
headcrash@atlantis:~/skriptEcke/unixboard/workingdir$ ./testskript3
/home/headcrash/skriptEcke/unixboard/workingdir
/home/headcrash/skriptEcke/unixboard/workingdir:/home/headcrash/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
Di 15. Feb 19:09:15 CET 2011

# Wechsel in ein anderes Verzeichnis
headcrash@atlantis:~/skriptEcke/unixboard/workingdir$ cd ../

headcrash@atlantis:~/skriptEcke/unixboard$ workingdir/testskript3
/home/headcrash/skriptEcke/unixboard
/home/headcrash/skriptEcke/unixboard/workingdir:/home/headcrash/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
Di 15. Feb 19:09:30 CET 2011
Hier haben wir die PATH-Variable so verändert, dass unsere Shell auch im Skriptverzeichnis "workingdir" nach ausführbaren Dateien sucht.

Ich hoffe ich konnte dir dass ein bisschen veranschaulichen, du wirst nicht darum herum kommen den Pfad zu den Skripten irgendwo im Hauptskript zu hinterlegen. Ob das jetzt durch eine Variable für den absoluten Pfad für die Skripte, ein "cd" ins Skriptverzeichnis oder das Anpassen der PATH-Variablen ist bleibt dir hinterlassen.

Schönen Abend
HeadCrash
 
Zuletzt bearbeitet:
wenn man keine absoluten Pfade verwenden will (oder gar $PATH anpassen) für den Sprung in's Working-Directory geht auch ein
Code:
cd $(dirname $0)
am Scriptanfang.
(und ja, das könnte man auch anders schreiben, aber so versteht's wenigstens fast jeder)
 

Ähnliche Themen

NAS-Drive Mount in Bash-Script über crontab

[Suche] - Hilfe bei der Überarbeitung eines bash-Scripts

script per Cronjob ausführen

Löschroutine mit Überprüfung

script wird als cronjob anders ausgeführt

Zurück
Oben