Relative path not safe


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Relative path not safe
# 1  
Old 04-20-2013
Relative path not safe

Hallo everyone,

I am running an SQL-Script over KShell-Script. Thus, in the KShell-Script there are these lines:

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 my SQL-Script it exists an export command:
Code:
export to ./tabelle.csv of del 
... 
...

As we can see, I have defined some variables, but uncompletely, such as WORKPATH is still unfilled. It is because, that the KShell-Script should be run in ANOTHER Unix-System. Now, the SQL-Script creates for a csv-table to the directory, which where the SQL-Script last being called. But the SQL-Script should create the csv-table in the variable EXPORTPATH.

So, thats why I was thinking, "okay, then I will just do a cd ${EXPORTPATH} bevor calling the SQL-Script:
Code:
... 
cd {EXPORTPATH} 
db2 connect to ${DBNAME} || die "can not open the database connection" 
db2 -tf sql_script.sql || die "comments" 
...

My teacher, who is a UNIX-Guru, said, this is not good. He gave me the reason for it but I could not understand. I try to explain the reason:

"if you do a cd there, it would be NOT RELATIVE PATH SAFE, it must be relative path safe. You are possibly killing all the relative paths, which come from outside."

It is difficult for me to express my question correctly becaus I actually dont even understand what the basic problem here. Does somebody have a clue? He is a UNIX-Guru, so it must be something true in his explanations.
As I said, the KShell-Script should be run in the machine, which I dont know the config-files and environment variables.

I hope, someone can help me.. Thank you.

Regards,

RatnaSmilie
# 2  
Old 04-20-2013
I suspect he is referring to $PWD which is the basis for your paths. So all your paths will be relative to $PWD, which is the path the caller of the script happens to be in when he calls the script. So indeed that location would be determined outside the script.

So you would either need to use a cd-command before that statement or use an absolute path instead. Or, if you need to use paths relative to the location of your script, you could perhaps use information from $0 as the basis...
# 3  
Old 04-20-2013
Hallo Scrutinizer,

Quote:
So you would either need to use a cd -command before that statement or use an absolute path instead.
This is exactly I wanted to do --> use cd ${EXPORTPATH} before running the SQL-Script, like this:

Code:
...  cd ${EXPORTPATH}  db2 connect to ${DBNAME} || die "can not open the database connection"  db2 -tf sql_script.sql || die "comments"  ...

Unfortunately, this is also exactly the step he said it is not right. I am not supposed to do cd there. Any idea, what he perhaps actually meant?

Thank you and best regards,

RatnaSmilie
# 4  
Old 04-20-2013
I meant cd to some absolute path before
Code:
WORKPATH=$PWD/work

# 5  
Old 04-20-2013
Hallo Scrutinizer,

thanks for your reply. Mhh.. but EXPORTPATH is an absolute path:
Code:
cd ${EXPORTPATH}

--> $PWD/work/export_meine_datei_bitte

Because pwd always give me an absolute path.

But as I already said, he said, I can not use:
Code:
cd ${EXPORTPATH}

before running the sql-script. I just dont know why.. This is so depressing.

Thank you..

Best regards,

RatnaSmilie
# 6  
Old 04-20-2013
$PWD returns an absolute path, but it is the path to the current directory. If you do not change the current directory in your script first, then this is the current directory of the person who is running the script, so ${EXPORTPATH} becomes relative to his current directory...
# 7  
Old 04-20-2013
I suspect your guru is wrong here.
There is a Unix principle that each process gets a copy of its parent process' environment.
So it cannot have an impact on another process but its own child processes.
For shell script safety have variables in quotes when used in command arguments:
Code:
cd "$EXPORTPATH"

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Convert Relative path to Absolute path, without changing directory to the file location.

Hello, I am creating a file with all the source folders included in my git branch, when i grep for the used source, i found source included as relative path instead of absolute path, how can convert relative path to absolute path without changing directory to that folder and using readlink -f ? ... (4 Replies)
Discussion started by: Sekhar419
4 Replies

2. UNIX for Dummies Questions & Answers

Help with cp command using relative path?

I have a lab I am doing for a Linux Operating class. The question I am stumped on is "For the following questions, only use the cp command to copy files. You should currently be inside your lab07 directory. Create a subdirectory inside this directory called ones and copy (working ... (1 Reply)
Discussion started by: CodyMongrel
1 Replies

3. UNIX for Dummies Questions & Answers

How to convert relative path to absolute path?

Hello Everyone, I want to convert Relative Path - /home/stevin/data/APP_SERVICE/../datafile.txt to Absolute Path - /home/stevin/data/datafile.txt Is there a built-in tool in Unix to do this or any good ideas as to how can I implement this. -Steve (5 Replies)
Discussion started by: qwarentine
5 Replies

4. Shell Programming and Scripting

How to change Absolute path to Relative path

Hello, I have a doubt:- --------------------- Current script:- ################################################################################################ prefix=user@my-server: find . -depth -type d -name .git -printf '%h\0' | while read -d "" path ; do ( cd "$path" || exit $?... (4 Replies)
Discussion started by: sahil_jammu
4 Replies

5. Shell Programming and Scripting

absolute path for a script ran with relative path

I have a script in which i want to print absolute path of the same script irrespective of path from where i run script. I am using test.sh: echo "pwd : `pwd`" echo "script name: $0" echo "dirname: `dirname $0`" when i run script from /my/test/dir/struct as ../test.sh the output i... (10 Replies)
Discussion started by: rss67
10 Replies

6. Shell Programming and Scripting

how to read the relative path

suppose i ahve a shell script Nsdnet.sh inside a directory /dialp/Release/bin another file nsdnet_file.csv is under the same directory. Now in the shell script i have call a java file, which reads the csvfile from the commandline. Now when i run the file as $ ./Nsdnet.sh ./nsdnet_file.csv then... (5 Replies)
Discussion started by: priyanka3006
5 Replies

7. UNIX for Dummies Questions & Answers

Help with absolute path and relative path

I'm having problems accessing the Knoppix software on my current computer and the replacement CD I ordered hasn't arrived yet. I have a guess at what the answer would be for this question but I am not sure as I cannot test it with the software. I have to create a directory called class, and... (1 Reply)
Discussion started by: mzero
1 Replies

8. Shell Programming and Scripting

Finding relative path of a file

I have to relatively get the path of a file to use it in the script. The directory structure is /export/opt/XTools/ and under this there are several version directories - 1.0_A0, 1.0_A1, 1.0_A2 etc.,. The actual file is under these directories: installscript.sh My script should pickup the... (4 Replies)
Discussion started by: chiru_h
4 Replies

9. Shell Programming and Scripting

getting full path from relative path

given a relative path, how do i convert it into a full one. i.e. if i am in /home/polypus and i am given foo/bar then to get a full path i can just concatinate it with pwd, but what if i am given "../mama" how do i programmatically convert: /home/polypus and ../mama into ... (4 Replies)
Discussion started by: polypus
4 Replies

10. UNIX for Dummies Questions & Answers

vi - replacing a relative path with absolute path in a file

Hi, I have a file with about 60 lines of path: app-defaults/boxXYZ....... I want to change this to /my/path/goes/here/app-defaults/boxXYZ, but of course vi doesn't like the regualr :s/old/new/ command. Is there any other quick way to do this? Thanks ;) (2 Replies)
Discussion started by: Yinzer955i
2 Replies
Login or Register to Ask a Question