(erledigt) Bash Funktionen aus andere/n Datei/en, Verständnis Frage

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ren22

(erledigt) Bash Funktionen aus andere/n Datei/en, Verständnis Frage

Beitrag von ren22 » 14.02.2018 17:07:36

Hallo,

Ausgangssituation:
/xdotool
/xdotool/funktionen ....hier liegt "funktionen.sh" und "rbfunktionen".sh
/xdotool/rb ....hier liegt "rb.sh"
also :
/xdotool/funktionen/funktionen.sh
/xdotool/funktionen/rbfunktionen.sh
/xdotool/rb/rb.sh

ich starte ein Script aus dem Verzeichnis "/xdotool/rb" heraus -> cd /xdotool/rb && sh ./rb.sh

In der Datei "rb.sh" steht am Anfang ". ../funktionen/rbfunktionen.sh" , soweit ist noch alles verständlich für mich
aber was ich nun nicht verstehe ist, warum muss ich in der Datei "/xdotool/funktionen/rbfunktionen.sh" ". ../funktionen/funktionen.sh" schreiben, dass auch diese Funktionen von der "/xdotool/rb/rb.sh" ausgeführt werden, mein bisheriges Verständnis sagt mir, dass ich normaler Weise eigentlich in der Datei "/xdotool/funktionen/rbfunktionen.sh" nur ". ./funktionen.sh" stehen habe müsste , ist doch im gleichen Verzeichnis...... da ja die Datei "rbfunktionen.sh" die "funktionen.sh" Datei aufruft.

Hoffe es Verständlich geschrieben zu haben ;-)
Danke
Zuletzt geändert von ren22 am 16.02.2018 18:37:22, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Funktionen aus andere/n Datei/en, Verständnis Frage

Beitrag von Meillo » 14.02.2018 18:06:49

ren22 hat geschrieben: ↑ zum Beitrag ↑
14.02.2018 17:07:36
aber was ich nun nicht verstehe ist, warum muss ich in der Datei "/xdotool/funktionen/rbfunktionen.sh" ". ../funktionen/funktionen.sh" schreiben, dass auch diese Funktionen von der "/xdotool/rb/rb.sh" ausgeführt werden, mein bisheriges Verständnis sagt mir, dass ich normaler Weise eigentlich in der Datei "/xdotool/funktionen/rbfunktionen.sh" nur ". ./funktionen.sh" stehen habe müsste , ist doch im gleichen Verzeichnis...... da ja die Datei "rbfunktionen.sh" die "funktionen.sh" Datei aufruft.
Das liegt daran, dass die Pfade relativ zum Working-Directory sind, und das ist (solange du kein cd machst) weiterhin /xdotool/rb.



Es funktioniert ja leider auch nicht, wenn du statt:

Code: Alles auswählen

cd /xdotool/rb && ./rb.sh
den Aufruf mal so machst:

Code: Alles auswählen

cd /tmp && /xdotool/rb/rb.sh
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Funktionen aus andere/n Datei/en, Verständnis Frage

Beitrag von Meillo » 14.02.2018 19:59:53

BASH_SOURCE koennte dir helfen. Siehe: https://stackoverflow.com/questions/305 ... ne-in-bash
Use ed once in a while!

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: Bash Funktionen aus andere/n Datei/en, Verständnis Frage

Beitrag von uname » 15.02.2018 09:00:41

Vielleicht wäre es sinnvoller die Anwendung so zu programmieren, dass sie aus jeden Ordner (ohne cd) korrekt gestartet werden kann. Dafür musst du dann aber absolute Pfade verwenden. Beispiele wären /opt oder /usr/local bzw. ~/.local wobei ich bei letztgenannten nicht sicher bin.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Funktionen aus andere/n Datei/en, Verständnis Frage

Beitrag von Meillo » 15.02.2018 09:17:48

uname hat geschrieben: ↑ zum Beitrag ↑
15.02.2018 09:00:41
Vielleicht wäre es sinnvoller die Anwendung so zu programmieren, dass sie aus jeden Ordner (ohne cd) korrekt gestartet werden kann. Dafür musst du dann aber absolute Pfade verwenden.
Dabei kann man BASH_SOURCE nutzen, um die absoluten Pfade dynamisch zu ermitteln.

Etwa in der Art (ungetestet):

Code: Alles auswählen

file="$(readlink -f "$BASH_SOURCE")"
incdir="$(dirname "$file")/../funktionen"
. "$incdir/funktionen.sh"
(Das benoetigt natuerlich eine Bash.)
Use ed once in a while!

ren22

Re: Bash Funktionen aus andere/n Datei/en, Verständnis Frage

Beitrag von ren22 » 16.02.2018 18:37:05

Code: Alles auswählen

file="$(readlink -f "$BASH_SOURCE")"
incdir="$(dirname "$file")/../funktionen"
. "$incdir/funktionen.sh"

geile Sache funktioniert perfekt !

Kommandos die mir bis dato noch nicht so geläufig waren. Sehr gut ;-))) wieder was gerlernt :THX: :THX: :THX: :THX: :THX:

vielen vielen Dank

Antworten