ubuntuusers.de

[BASH] source von Variable

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.10 (Yakkety Yak)
Antworten |

Nur-Ein-Blogger

Anmeldungsdatum:
4. April 2011

Beiträge: 146

Hallo Leute,

ich strukturiere gerade etwas um und wollte dazu ein Script_Path anlegen.

1
2
unset $SCRIPTPATH
SCRIPTPATH='/root/scriptfolder'

Dann will ich in der .sh Dateien einbinden per "source"

1
2
3
4
source $SCRIPTPATH/install/nginx.sh
source $SCRIPTPATH/install/php7.sh
source $SCRIPTPATH/install/mariadb.sh
source $SCRIPTPATH/install/phpmyadmin.sh

Das funktioniert aber nicht.

Als Ausgabe bekomme ich immer:

1
2
3
4
/root/scriptfolder/install.sh: Zeile 37: ~/scriptfolder/install/nginx.sh: Datei oder Verzeichnis nicht gefunden
/root/scriptfolder/install.sh: Zeile 39: ~/scriptfolder/install/php7.sh: Datei oder Verzeichnis nicht gefunden
/root/scriptfolder/install.sh: Zeile 41: ~/scriptfolder/install/mariadb.sh: Datei oder Verzeichnis nicht gefunden
/root/scriptfolder/install.sh: Zeile 43: ~/scriptfolder/install/phpmyadmin.sh: Datei oder Verzeichnis nicht gefunden

Die Ausgabe von $SCRIPTPATH ist:

/root/scriptfolder

Wenn ich mit absoluten Pfaden wie diesem Arbeite:

1
source /root/scriptfolder/install/nginx.sh

dann klappt es ja wie es soll. Aber die Var macht mir gerade Probleme :s

Könnte mir kurz jemand erklären warum ich den Wald nicht finde?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13192

Nur-Ein-Blogger schrieb:

ich strukturiere gerade etwas um und wollte dazu ein Script_Path anlegen.

1
2
unset $SCRIPTPATH
SCRIPTPATH='/root/scriptfolder'

Der unset ist falsch. Du willst

1
unset SCRIPTPATH

Ist aber völlig überflüssig, weil Du den Wert direkt neu setzt - es sei denn, Du willst auf jeden Fall verhindern, dass diese Variable zu Kindprozessen exportiert wird.

Dann will ich in der .sh Dateien einbinden per "source"

1
2
3
4
source $SCRIPTPATH/install/nginx.sh
source $SCRIPTPATH/install/php7.sh
source $SCRIPTPATH/install/mariadb.sh
source $SCRIPTPATH/install/phpmyadmin.sh

Besser mit Quoting, auch wenn das in diesem Fall eigentlich nicht sein müsste:

1
2
3
4
source "$SCRIPTPATH/install/nginx.sh"
source "$SCRIPTPATH/install/php7.sh"
source "$SCRIPTPATH/install/mariadb.sh"
source "$SCRIPTPATH/install/phpmyadmin.sh"

Das funktioniert aber nicht.

Als Ausgabe bekomme ich immer:

1
2
3
4
/root/scriptfolder/install.sh: Zeile 37: ~/scriptfolder/install/nginx.sh: Datei oder Verzeichnis nicht gefunden
/root/scriptfolder/install.sh: Zeile 39: ~/scriptfolder/install/php7.sh: Datei oder Verzeichnis nicht gefunden
/root/scriptfolder/install.sh: Zeile 41: ~/scriptfolder/install/mariadb.sh: Datei oder Verzeichnis nicht gefunden
/root/scriptfolder/install.sh: Zeile 43: ~/scriptfolder/install/phpmyadmin.sh: Datei oder Verzeichnis nicht gefunden

Kannst Du mal zeigen, welcher Code in welcher Datei ist? Wo stehen die Zeilen, die Du eingangs gezeigt hast? Was steht in /root/scriptfolder/install.sh? usw.

Die Ausgabe von $SCRIPTPATH ist:

/root/scriptfolder

Wenn ich mit absoluten Pfaden wie diesem Arbeite:

1
source /root/scriptfolder/install/nginx.sh

dann klappt es ja wie es soll. Aber die Var macht mir gerade Probleme :s

Könnte mir kurz jemand erklären warum ich den Wald nicht finde?

Noch nicht. Wir brauchen mehr Input.

Nur-Ein-Blogger

(Themenstarter)

Anmeldungsdatum:
4. April 2011

Beiträge: 146

In der install.sh stehen bisher nur Kommentare und das einbinden vieler Script files nach o.g. Schema.

1
2
3
4
5
6
echo "Ausgabe der Filenames:"
echo $filename1
echo $filename2
echo $filename3
echo $filename4
echo $filename5

Sonst nix.

In den eingebunden files steht bisher nur

1
2
echo "test FILENAME"
filename1="filename1"

Also habe ich quasi keinen Fehler beim einbinden gemacht sondern das Problem muss woanders zu finden sein. Da ich das in VB teste werde ich mal ein neues Image installieren (bisher setze ich es immer zurück) und teste es dann nochmal.

Achso, alle Dateien sind immer UNIX (LF) und UTF-8

schusch

Avatar von schusch

Anmeldungsdatum:
2. September 2008

Beiträge: 324

Wohnort: Berlin

Ich rate mal, dass die Zeilen

1
2
unset $SCRIPTPATH
SCRIPTPATH='/root/scriptfolder'

nicht in der Datei install.sh stehen.

Also musst du vor dem Aufruf von install.sh

1
export SCRIPTPATH=/root/scriptfolder

sagen, oder die Zuweisung in die Datei install.sh schreiben.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13192

Nur-Ein-Blogger schrieb:

In der install.sh stehen bisher nur Kommentare und das einbinden vieler Script files nach o.g. Schema.

Ich sehe da weder die source-Statements noch die Definition von $SCRIPTPATH. Bitte poste mal ein konkretes, vereinfachtes Beispiel SSCCE, damit wir genau nachvollziehen können, was genau Du testest.

Nur-Ein-Blogger

(Themenstarter)

Anmeldungsdatum:
4. April 2011

Beiträge: 146

Das Problem ist gelöst.

install.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash
#Server Script path
unset $SCRIPTPATH
SCRIPTPATH='/root/scriptfolder'
#SCRIPTPATH='.'
#------------------------
source $SCRIPTPATH/userconfig/config.cfg #hier ist eine Konfiguration in variablen hinterlegt
source $SCRIPTPATH/inc/varall.sh #hier sind variablen definiert
source $SCRIPTPATH/inc/functions.sh #hier globale funktionen

source $SCRIPTPATH/install/php7.sh

php7.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash
#------------------------
#FIXME
#Server Script path
SCRIPTPATH='/root/scriptfolder'
#SCRIPTPATH="."
#------------------------

source $SCRIPTPATH/userconfig/config.cfg #hier ist eine Konfiguration in variablen hinterlegt aus denen gelesen wird im Script
source $SCRIPTPATH/inc/functions.sh #hier sind variablen definiert
echo "php7 script file"

Ich habe jetzt die VM neu aufgesetzt und in der php7.sh auch den SCRIPTPATH gesetzt. Bisher war in der SCRIPTPATH von php7.sh der falsche Pfad angegeben. Ich hatte den nur in der install.sh angepasst und dachte das reicht.

Werde ab jetzt die install.sh einbinden in neuen files, dass ich nur noch einmal eine Pfadangabe habe.

Danke für eure Hilfe und Entschuldigung für die miserable erklärung des Problems. Zukünftig achte ich mehr darauf.

Antworten |