• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] Variable für aktuelles Script-Verzeichnis?

Hallo,

ich will ein Sub-Script (test.sh) aus einem Main-Script (main.sh) aufrufen.
main.sh wird auf unterschiedlichen Rechnern in unterschiedlichen Verzeichnissen eingesetzt,
test.sh liegt aber immer im gleichen Verzeichnis wie main.sh.

Kann ich den Aufruf von test.sh automatisieren
(Variable für Aufrufverzeichnis von main.sh) -
ohne immer die Pfade anpassen zu müssen ?

Hab in der FoSu nix gefunden ...
Ein Tip wäre klasse. ;)
 
Wenn du zur Laufzeit des Main-Script in dessen Verzeichnis stehst, könnte doch ein "./sub.sh" ausreichend sein.

Geht allerdings nicht, wenn du innerhalb von main.sh das Verzeichnis wechselst.
 
main.sh kennt sein Aufrufverzeichnis Aufgrund des Namens ($0 enthält den Pfad)

ansonten $PWD (Print Working Directory) wenn du vor aufruf von main.sh in dieses Verzeichnis gewechselt bist

gib doch mal ein Beispiel was du genau tun willst ...
 
danke für eure Tips.
schön wäre, nicht immer vor Aufruf in das Verzeichnis wechseln zu müssen.
Die Ausgabe von $0 klappt leider nicht - genau diese Ausgabe suche ich.

Code:
p4:~ # la /f/
total 8.5K
-rwx------   1 root root 269 May  2 19:02 main.sh
-rwx------   1 root root  66 May  2 18:40 test.sh
Code:
p4:~ # . /f/main.sh
. /f/main.sh
+ . /f/main.sh
#!/bin/sh
set -vx
++ set -vx

echo Prozedurname ist: $0
++ echo Prozedurname ist: -bash
Prozedurname ist: -bash
echo ${0}
++ echo -bash
-bash
./test.sh
++ ./test.sh
-bash: ./test.sh: No such file or directory
 
setze mal einen shangbang bei deinen Scripten an den Anfang:
Code:
#!/bin/bash
oder
Code:
#!/bin/sh

dann sollte das mit dem $0 klappen ...
 
sorry - war etwas unklar gepostet.
Shangbang ist drin:

Code:
p4:~ # cat /f/main.sh
#!/bin/bash
#       set -vx
echo user ist: $USER
echo shell ist: $SHELL
echo Prozedurname ist: $0
echo "    -- -- --                                        -- -- --        "
echo ${0}
echo "    -- -- --                                        -- -- --        "
./test.sh

p4:~ # . /f/main.sh
user ist: root
shell ist: /bin/bash
Prozedurname ist: -bash
    -- -- --                                        -- -- --
-bash
    -- -- --                                        -- -- --
-bash: ./test.sh: No such file or directory

p4:~ # cat /f/test.sh
#!/bin/bash
#       set -vx
echo ${0}
echo "    hier test.sh      "
 
strange ...

Code:
cat test.sh
#!/bin/bash
echo user ist: $USER
echo shell ist: $SHELL
echo Prozedurname ist: $0
echo "    -- -- --                                        -- -- --        "
echo ${0}
echo "    -- -- --                                        -- -- --        "

Code:
packages/test.sh
user ist: toni
shell ist: /bin/bash
Prozedurname ist: packages/test.sh
    -- -- --                                        -- -- --
packages/test.sh
    -- -- --                                        -- -- --

Code:
~/packages> ./test.sh
user ist: toni
shell ist: /bin/bash
Prozedurname ist: ./test.sh
    -- -- --                                        -- -- --
./test.sh
    -- -- --                                        -- -- --
 
rob40 schrieb:
p4:~ # . /f/main.sh
Was macht denn das Leerzeichen zwischen "." und "/f/main.sh"? Damit sagst du der Shell, sie soll sich die Befehle einzeln aus der Datei holen und nacheinander ausführen, aber das ausführende Programm ist dann die Shell selbst, es gibt kein "Skript" im eigentlichen Sinn.

Befindet sich main.sh im aktuellen Verzeichnis, dann startest du es mit "./main.sh" (ohne irgendein Leerzeichen). Andernfalls gibst du als Befehl den Pfad zu main.sh an, etwa "/f/main.sh" (also ohne "." am Anfang).

Dann sollte in deinem Skript folgendes funktionieren, um test.sh in dem Verzeichnis aufzurufen, in dem main.sh liegt:
Code:
$(dirname "$0")/test.sh
 
spitze: das wars !
wieder dazu gelernt ...

Danke euch beiden für ausführliche Info ! :)
 
Oben