scripts/a.sh
通过scripts/b.sh
或source
调用sh
。
但是我不确定工作目录将是scripts
还是scripts
的父目录。
引用b.sh
的最佳实践是什么?我可以找到当前脚本的目录,然后cd
到该目录,然后简单地调用./b.sh
。但这似乎要在每个调用另一个脚本的脚本中放入很多代码。
答案 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
脚本,该脚本将在第一个目录中找到。