![从其自身收集 Bash 脚本的原始目录](https://linux22.com/image/1162646/%E4%BB%8E%E5%85%B6%E8%87%AA%E8%BA%AB%E6%94%B6%E9%9B%86%20Bash%20%E8%84%9A%E6%9C%AC%E7%9A%84%E5%8E%9F%E5%A7%8B%E7%9B%AE%E5%BD%95.png)
有没有办法让 bash 脚本检测其运行的路径目录?就好像脚本知道它在哪里一样。为了使用与脚本位于同一位置的文件。我想将目录更改为 Bash 脚本所在的目录。
这个 Bash 脚本用于触发一些操作(其他 python 脚本、应用程序……等等),但我想将操作目录切换到他的根目录。
答案1
变量$PWD
(也是通过命令查询的pwd
)将告诉您 shell 脚本运行的当前工作目录。但是,找到脚本本身所在的位置取决于几个因素。
如果你使用bash
shell,你可以使用${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 的答案提供了一些解决方案。有几种方法可以移植确定脚本是否来源,然而看起来这样做的唯一好处就是确定脚本位置不可用。