本文共 1151 字,大约阅读时间需要 3 分钟。
如何在Shell脚本中获取脚本文件所在路径?
在Shell脚本编写中,有时需要知道脚本所在的绝对路径。以下是两种常用的方法。
方法一:简单方法
DIR=$(cd "$(dirname "$0")"; pwd)
这种方法简单易懂,适用于大多数情况。dirname "$0"会返回脚本所在文件的目录路径。cd命令会切换目录并自动返回终端。最后pwd命令会输出当前目录路径。
方法二:处理软链接的方法
如果脚本被调用时存在软链接,使用上述方法可能会返回错误结果。为了正确解析指向脚本的软链接,可以采用以下多行命令:
SOURCE="${BASH_SOURCE[0]}"while [ -h "$SOURCE" ]; do DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd)" SOURCE="$(readlink "$SOURCE")" [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"doneDIR="$( cd -P "$( dirname "$SOURCE" )" && pwd)" 注意事项
cd命令切换目录,此方法可能无法正常工作。需要了解$CDPATH变量的行为,建议参考相关文章了解其作用。示例:完整脚本
#!/bin/bashSOURCE="${BASH_SOURCE[0]}"while [ -h "$SOURCE" ]; do TARGET="$(readlink "$SOURCE")" if [[ $SOURCE == /* ]]; then echo "SOURCE '$SOURCE' is an absolute symlink to '$TARGET'" SOURCE="$TARGET" else DIR="$( dirname "$SOURCE" )" echo "SOURCE '$SOURCE' is a relative symlink to '$TARGET' (relative to '$DIR')" SOURCE="$DIR/$TARGET" fidoneRDIR="$( dirname "$SOURCE" )"DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd)"if [ "$DIR" != "$RDIR" ]; then echo "DIR '$RDIR' resolves to '$DIR'"fiecho "DIR is '$DIR'" 这种方法可以正确处理软链接,确保返回脚本的实际路径。
转载地址:http://bqzfk.baihongyu.com/