繁体   English   中英

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

[英]In bash, what's the best way for a script to reference the path of another script?

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

但我不能肯定的是,工作目录将是scripts或者父scripts或别的东西。

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

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

bash手册

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

来自man readlink

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

来自man dirname

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

共:

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

我看过一些bash脚本,其开头类似于:

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

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

@编辑

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

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

然后运行:

. a.sh

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM