在bash中,脚本引用另一个脚本路径的最佳方法是什么?

时间:2018-12-02 13:12:04

标签: bash

scripts/a.sh通过scripts/b.shsource调用sh

但是我不确定工作目录将是scripts还是scripts的父目录。

引用b.sh的最佳实践是什么?我可以找到当前脚本的目录,然后cd到该目录,然后简单地调用./b.sh。但这似乎要在每个调用另一个脚本的脚本中放入很多代码。

1 个答案:

答案 0 :(得分:1)

不需要cd,使source或命令采用完整路径。只需获取脚本完整路径的目录名,然后从那里运行脚本即可。

来自bash manual

  

0
  ($ 0)扩展为shell或shell脚本的名称。 ....

来自man readlink

  

-f,--canonicalize
  通过递归地遵循给定名称的每个组件中的每个符号链接来规范化; ...

来自man dirname

  

dirname-从文件名中删除非目录后缀

一起:

. "$(dirname "$(readlink -f "$0")")"/b.sh

我看过一些以类似以下内容开头的bash脚本:

DIR=$(dirname "$(readlink -f "$0")")
cd "$DIR"

因此,即使用户从另一个目录运行它,脚本中的当前工作目录也保持不变。

@edit

就像@GordonDavisson在评论中建议的那样,我们还可以将您的目录添加到PATH:

export PATH="$(dirname "$(readlink -f "$0")")":"$PATH"

然后运行:

. a.sh

将通过PATH变量中列出的内部目录搜索a.sh脚本,该脚本将在第一个目录中找到。