Verständnisfrage...

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

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. :(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.
 

melmager

Erfahrenes Mitglied
ich versuchs mal

Relative Path save bedeutet - egal wo das script ist es soll das gewünschte ergebnis bringen

sobald du ein cd machst verlässt du das relative .. und landes an einem exakten punkt

sprich ich sage dir gehe von dem punkt wo du bist drei schritte nach links - und dann 2 vor das ist relativ -

wenn ich aber sage gehe zur tür ist das absolut und dann 2 vor landest du wohl möglich woanders im raum :)


in deinem fall landet ja das ergebnis in dem verzeichnis wo das script ist .. also
verschieb es ...
benutze mv nicht cd :)

ich hoffe die wirre erklärung bringt dich weiter
 
Zuletzt bearbeitet: