是 Bash 脚本文件的起始行,即 Shebang 行,它以感叹号开头,明确指定了脚本将由 /bin/bash 解释器执行,这一行至关重要,它定义了脚本的运行环境,确保脚本能够被系统正确识别和解析,是编写 Shell 脚本的标准标识。
Linux执行路径下的脚本文件路径解析与应用实战
在 Linux 系统管理和自动化运维中,脚本文件无处不在,无论是简单的 Shell 脚本还是复杂的 Python 封装,经常会遇到需要获取当前脚本所在目录、或者需要引用同目录下其他文件的情况,如何准确获取 Linux执行路径下的脚本文件路径,是每个运维人员必须掌握的核心技能。
本文将深入探讨在 Bash 环境中,如何通过变量和命令精确捕获脚本文件路径,并解决常见的路径引用问题。

核心变量:$0 的奥秘
在 Bash 中,获取脚本自身路径最基础的方法是使用特殊变量 $0。
当你运行 ./test.sh 时,$0 输出的是 ./test.sh(相对路径);当你运行 /usr/local/bin/test.sh 时,$0 输出的是 /usr/local/bin/test.sh(绝对路径)。
局限性:
$0 虽然能返回路径,但它并不总是“绝对路径”,如果脚本是通过符号链接调用的,或者用户使用相对路径调用,$0 的表现形式可能不够直观,且难以直接用于判断文件是否存在。
获取绝对路径:realpath 与 readlink
为了获取一个标准的、可信赖的绝对路径,我们需要借助 realpath 或 readlink 命令。
使用 realpath 这是最现代、最简洁的方法(GNU coreutils 自带):
echo "脚本绝对路径: $ABS_PATH"
使用 readlink -f
在旧版本的 Linux 或某些精简环境中,realpath 可能不可用,readlink -f 是最佳替代方案,它会解析符号链接,并返回最终的物理路径:
echo "脚本绝对路径: $ABS_PATH"
获取脚本所在目录(最实用的技巧)
在实际开发中,我们通常不需要知道脚本的具体文件名,只需要知道它所在的目录,以便去加载同目录下的配置文件或依赖库。
结合 dirname 和 cd 命令,我们可以构建一个通用的函数:
# 获取脚本所在目录的绝对路径
# 解释:
# 1. dirname "$0" 获取脚本文件名(如 test.sh)
# 2. cd "$(dirname "$0")" 切换工作目录到脚本所在目录
# 3. pwd 输出当前目录的绝对路径
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
echo "脚本所在目录: $SCRIPT_DIR"
# 示例:引用同目录下的配置文件
CONFIG_FILE="$SCRIPT_DIR/config.conf"
if [ -f "$CONFIG_FILE" ]; then
echo "配置文件加载成功: $CONFIG_FILE"
else
echo "错误:配置文件未找到"
fi
进阶:区分“执行目录”与“脚本目录”
这是一个非常容易混淆的点,在 Linux 中,$PWD(当前工作目录)代表的是你启动脚本时所在的目录,而不是脚本文件所在的目录。
场景演示: 假设目录结构如下:
/home/user/
├── project/
│ └── main.sh
└── tools/
└── helper.sh
在 main.sh 中执行 ./tools/helper.sh:
- 脚本文件路径 ($0):
/home/user/project/tools/helper.sh - **当前执行目录 ($

