博客
关于我
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/

你可能感兴趣的文章
Netty源码—4.客户端接入流程二
查看>>
Netty源码—5.Pipeline和Handler一
查看>>
Netty源码—5.Pipeline和Handler二
查看>>
Netty源码—6.ByteBuf原理一
查看>>
Netty源码—6.ByteBuf原理二
查看>>
Netty源码—7.ByteBuf原理三
查看>>
Netty源码—7.ByteBuf原理四
查看>>
Netty源码—8.编解码原理一
查看>>
Netty源码—8.编解码原理二
查看>>
Netty源码解读
查看>>
netty的HelloWorld演示
查看>>
Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
查看>>
Netty的网络框架差点让我一夜秃头,哭了
查看>>
Netty相关
查看>>
Netty简介
查看>>
Netty线程模型理解
查看>>
netty解决tcp粘包和拆包问题
查看>>
Netty速成:基础+入门+中级+高级+源码架构+行业应用
查看>>
Netty遇到TCP发送缓冲区满了 写半包操作该如何处理
查看>>
netty(1):NIO 基础之三大组件和ByteBuffer
查看>>