Hallo zusammen,
Ich führe ein SQL-Script via Shell-Script. In dem Shell-Skript stehen also unter anderem folgende Zeilen:
In meinem sql-Skript sql_script.sql existiert ein export-Befehl:
Wie man sieht, in dem Shell-Skript habe ich ein paar Variablen definiert, allerdings nicht komplett, zum Beispiel die Variable WORKPATH ist noch offen. Dies liegt daran, dass das Shell-Skript zur Ausführung meines SQL-Skriptes in einer ANDEREN Unix-Umgebung angestoßen werden soll. Nun, das SQL-Skript spuckt mir ja die csv-Tabelle ins Verzeichnis raus, wo zuletzt sein Aufruf stattfand. Das SQL-Skript soll aber die csv-Tabelle ins Exportverzeichnis (EXPORTPATH) ausspucken.
So, ich dachte, na gut, dann mache ich einen cd ${EXPORTPATH} vor dem Aufruf von SQL-Skript, so dass es dann wie folgt aussehen würde:
Nun, mein Lehrer meinte, das geht nicht. Er hat mir die Erklärung dazu auch gegeben, aber ich habe sie leider nicht verstanden. Der Grund sei:
"wenn Du dort einen cd machst, zerschießt du all die RELATIVEN Pfaden, die möglicherweise von außen kommen. Es muss RELATIVE PATH SAFE sein. Wenn du dort einen cd machst, ist es nicht relative path safe.. "
Es fällt mir schwer, meine Frage richtig zu formulieren, da ich eigentlich auch nicht so richtig verstehe, was hier das Problem ist.
Aber es muss schon was dran sein, was er gesagt hat, er ist halt ein UNIX-Guru. Leider war für mich seine Sprache zu hoch. Dazu kommt, dass das Shell-Skript in einer Umgebung ausgeführt werden soll, deren Konfig bzw. Umgebungsvariablen ich so nicht kenne.
Ich hoffe, dass jemand vielleicht eine exakte Erfahrung in der Hinsicht. Ich bedanke mich im Voraus.
Viele Grüße aus Rheinland,
Eure Ratna
PS. Ich habe wieder die Vermutung, dass es eigentlich etwas ganz einfaches ist, aber ich kam leider nicht drauf, was er damit meinte.
Ich führe ein SQL-Script via Shell-Script. In dem Shell-Skript stehen also unter anderem folgende Zeilen:
Code:
WORKPATH=$PWD/work
EXPORTDIR=export_meine_datei_bitte
EXPORTPATH=${WORKPATH}/${EXPORTDIR}
...
db2 connect to ${DBNAME} || die "can not open database connection"
db2 -tf sql_script.sql || die "comments"
...
In meinem sql-Skript sql_script.sql existiert ein export-Befehl:
Code:
export to ./tabelle.csv of del
...
...
Wie man sieht, in dem Shell-Skript habe ich ein paar Variablen definiert, allerdings nicht komplett, zum Beispiel die Variable WORKPATH ist noch offen. Dies liegt daran, dass das Shell-Skript zur Ausführung meines SQL-Skriptes in einer ANDEREN Unix-Umgebung angestoßen werden soll. Nun, das SQL-Skript spuckt mir ja die csv-Tabelle ins Verzeichnis raus, wo zuletzt sein Aufruf stattfand. Das SQL-Skript soll aber die csv-Tabelle ins Exportverzeichnis (EXPORTPATH) ausspucken.
So, ich dachte, na gut, dann mache ich einen cd ${EXPORTPATH} vor dem Aufruf von SQL-Skript, so dass es dann wie folgt aussehen würde:
Code:
...
cd {EXPORTPATH}
db2 connect to ${DBNAME} || die "can not open the database connection"
db2 -tf sql_script.sql || die "comments"
...
Nun, mein Lehrer meinte, das geht nicht. Er hat mir die Erklärung dazu auch gegeben, aber ich habe sie leider nicht verstanden. Der Grund sei:
"wenn Du dort einen cd machst, zerschießt du all die RELATIVEN Pfaden, die möglicherweise von außen kommen. Es muss RELATIVE PATH SAFE sein. Wenn du dort einen cd machst, ist es nicht relative path safe.. "
Es fällt mir schwer, meine Frage richtig zu formulieren, da ich eigentlich auch nicht so richtig verstehe, was hier das Problem ist.
![Frown :( :(](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f641.png)
Ich hoffe, dass jemand vielleicht eine exakte Erfahrung in der Hinsicht. Ich bedanke mich im Voraus.
Viele Grüße aus Rheinland,
Eure Ratna
PS. Ich habe wieder die Vermutung, dass es eigentlich etwas ganz einfaches ist, aber ich kam leider nicht drauf, was er damit meinte.