获取源bash脚本的路径

获取源bash脚本的路径

这是我尝试的简单脚本

#!/bin/bash DIR="$(cd "$(dirname $0)" && pwd)" echo $DIR

当我执行它时$ ./my_script.sh,正确获取路径。
但是,当我像这样获取它时$ source my_script.sh,它会获取路径/bin

如何通过源获取脚本的路径?
源代码和执行代码有什么区别?

答案1

获取脚本和“运行它”之间的区别在于,当您获取它(使用source.)时,该脚本将在当前 shell 环境中执行,而如果您“运行它”,则会启动一个新的 shell 进程。您想要源脚本来更改当前的 shell 环境。在单独的 shell 进程中运行的脚本可以不是更改父 shell 的环境。 “环境”是指 shell 和环境变量的值、当前工作目录等。

脚本通常被编写为要么获取源代码要么在其自己的 shell 环境中执行,但很少两者兼而有之。获取源的脚本有时称为“点脚本”(因为 是.获取此类脚本的标准命令;source是 的bash“别名” .)。

由 shell 获取的点脚本bash可以通过检查数组的第一个元素来找到其位置BASH_SOURCE

printf 'My location: %s\n' "$( dirname "${BASH_SOURCE[0]}" )"

目录路径将相对于调用时source.脚本上的当前工作目录。

相关内容