从其自身收集 Bash 脚本的原始目录

从其自身收集 Bash 脚本的原始目录

有没有办法让 bash 脚本检测其运行的路径目录?就好像脚本知道它在哪里一样。为了使用与脚本位于同一位置的文件。我想将目录更改为 Bash 脚本所在的目录。

这个 Bash 脚本用于触发一些操作(其他 python 脚本、应用程序……等等),但我想将操作目录切换到他的根目录。

答案1

变量$PWD(也是通过命令查询的pwd)将告诉您 shell 脚本运行的当前工作目录。但是,找到脚本本身所在的位置取决于几个因素。

如果你使用bashshell,你可以使用${BASH_SOURCE[0]}变量来查找脚本的运行位置,如下所示戴夫·多普森

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

在其他情况下,例如zsh(除非在函数中)ksh,和 POSIX应该查询/bin/sh变量$0,可能使用dirname命令,或通过参数替换。请注意,这主要适用于您执行的顶级脚本。

bash但是,如果你不使用变量,源脚本可能会有问题${BASH_SOURCE[0]}。根据Gilles 的回答,通常无法从脚本本身获取源脚本的位置。调用脚本会知道位置,但源脚本不会。但是,引用的 Gilles 的答案提供了一些解决方案。有几种方法可以移植确定脚本是否来源,然而看起来这样做的唯一好处就是确定脚本位置不可用。

相关内容