13

So I have one bash script which calls another bash script. The second script is in a different folder.

script1.sh: "some_other_folder/script2.sh" # do something script2.sh: src=$(pwd) # THIS returns current directory of script1.sh... # do something 

In this second script it has the line src=$(pwd) and since I'm calling that script from another script in a different directory, the $(pwd) returns the current directory of the first script.

Is there any way to get the current directory of the second script using a simple command within that script without having to pass a parameter?

Thanks.

3
  • This is a SO FAQ: Can a Bash script tell what directory it's stored in? Commented May 31, 2013 at 6:16
  • One comment on terminology. Current working directory refers to the single runtime value for each process - the directory in which it is running (i.e. answering the question, where is "."). A better way to ask the question is, "how do I locate the directory from which the second script is being executed". Commented Aug 22, 2013 at 19:14
  • See also stackoverflow.com/questions/59895/…. Commented Aug 22, 2013 at 19:14

2 Answers 2

5

I believe you are looking for ${BASH_SOURCE[0]}, readlinkand dirname (though you can use bash string substitution to avoid dirname)

[jaypal:~/Temp] cat b.sh #!/bin/bash ./tp/a.sh [jaypal:~/Temp] pwd /Volumes/Data/jaypalsingh/Temp [jaypal:~/Temp] cat tp/a.sh #!/bin/bash src=$(pwd) src2=$( dirname $( readlink -f ${BASH_SOURCE[0]} ) ) echo "$src" echo "$src2" [jaypal:~/Temp] ./b.sh /Volumes/Data/jaypalsingh/Temp /Volumes/Data/jaypalsingh/Temp/tp/ 
Sign up to request clarification or add additional context in comments.

Comments

4

Please try this to see if it helps

loc=`dirname $BASH_SOURCE` 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.