被另一个Bash脚本调用后获取当前文件目录

13

我有一个bash脚本调用另一个位于不同文件夹的bash脚本。

script1.sh:
"some_other_folder/script2.sh"
# do something

script2.sh:
src=$(pwd) # THIS returns current directory of script1.sh...
# do something
在第二个脚本中,有一行代码src=$(pwd),由于我从另一个目录中的另一个脚本调用该脚本,$(pwd)返回第一个脚本的当前目录。有没有一种简单的命令在该脚本中获取第二个脚本的当前目录,而无需传递参数?谢谢。

对于术语的一点注释。当前工作目录指的是每个进程的单一运行时值 - 它所在的目录(即回答问题:“.”在哪里)。更好的提问方式是:“我如何定位第二个脚本所在的目录”。 - ash
请参见https://dev59.com/yXVD5IYBdhLWcg3wL4cA?rq=1。 - ash
2个回答

5

我相信你正在寻找${BASH_SOURCE[0]}readlinkdirname,尽管你可以使用bash字符串替换来避免使用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/

4
请尝试以下方法,看是否有帮助。
loc=`dirname $BASH_SOURCE`

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接