![](/img/trans.png)
[英]In a bash script, what's the best way to treat all errors as a success exit but the last one?
[英]In bash, what's the best way for a script to reference the path of another script?
scripts/a.sh
scripts/b.sh
通过source
或sh
调用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.