博客
关于我
linux如何提取文件名称,Linux系统中获取路径的文件名的方法
阅读量:801 次
发布时间:2023-02-03

本文共 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/

你可能感兴趣的文章
Nginx代理配置详解
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>
nginx反向代理
查看>>
Nginx反向代理
查看>>
nginx反向代理、文件批量改名及统计ip访问量等精髓总结
查看>>
Nginx反向代理与正向代理配置
查看>>
Nginx反向代理及负载均衡实现过程部署
查看>>
Nginx反向代理是什么意思?如何配置Nginx反向代理?
查看>>
nginx反向代理解决跨域问题,使本地调试更方便
查看>>
Nginx反向代理配置
查看>>
Nginx启动SSL功能,并进行功能优化,你看这个就足够了
查看>>
nginx启动脚本
查看>>
Nginx在Windows上和Linux上(Docker启动)分别配置基本身份认证示例
查看>>
Nginx在Windows下载安装启动与配置前后端请求代理
查看>>
Nginx多域名,多证书,多服务配置,实用版
查看>>
nginx如何实现图片防盗链
查看>>
Nginx学习总结(12)——Nginx各项配置总结
查看>>
Nginx学习总结(13)——Nginx 重要知识点回顾
查看>>
Nginx学习总结(14)——Nginx配置参数详细说明与整理
查看>>