被另一个bash脚本调用后获取文件的当前目录[重复]

Posted

技术标签:

【中文标题】被另一个bash脚本调用后获取文件的当前目录[重复]【英文标题】:Get current directory of file after getting called by another bash script [duplicate] 【发布时间】:2013-05-26 20:19:16 【问题描述】:

所以我有一个 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) 返回第一个脚本的当前目录。

有没有什么方法可以在第二个脚本中使用一个简单的命令来获取第二个脚本的当前目录,而无需传递参数?

谢谢。

【问题讨论】:

这是一个 SO 常见问题解答:Can a Bash script tell what directory it's stored in? 对术语的评论。当前工作目录是指每个进程的单个运行时值——它正在运行的目录(即回答问题,“.”在哪里)。问这个问题的更好方法是,“我如何找到执行第二个脚本的目录”。 另见***.com/questions/59895/…。 【参考方案1】:

试试这个看看有没有用

loc=`dirname $BASH_SOURCE`

【讨论】:

谢谢,成功了!【参考方案2】:

我相信您正在寻找 $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/

【讨论】:

以上是关于被另一个bash脚本调用后获取文件的当前目录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python获取当前脚本文件夹(Script)的绝对路径

bash 无法从文本文件中找到目录 [重复]

bash中的for循环[重复]

用于提取目录中所有 .tgz 的 Bash 脚本[重复]

循环目录并对 bash 脚本中的文件进行操作

仅从 Bash 脚本中的路径获取文件名 [重复]