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

你可能感兴趣的文章
No module named 'crispy_forms'等使用pycharm开发
查看>>
No module named 'pandads'
查看>>
No module named cv2
查看>>
No module named tensorboard.main在安装tensorboardX的时候遇到的问题
查看>>
No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
查看>>
No new migrations found. Your system is up-to-date.
查看>>
No qualifying bean of type XXX found for dependency XXX.
查看>>
No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
查看>>
No resource identifier found for attribute 'srcCompat' in package的解决办法
查看>>
no session found for current thread
查看>>
No static resource favicon.ico.
查看>>
no such file or directory AndroidManifest.xml
查看>>
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
查看>>
NO.23 ZenTaoPHP目录结构
查看>>
no1
查看>>
NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
查看>>
NOAA(美国海洋和大气管理局)气象数据获取与POI点数据获取
查看>>
NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
查看>>
node
查看>>
node exporter完整版
查看>>