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