美文网首页命令行工具Bash
获取正在执行 Shell 脚本的绝对路径

获取正在执行 Shell 脚本的绝对路径

作者: 舌尖上的大胖 | 来源:发表于2019-12-07 20:33 被阅读0次

背景

在使用 Shell 脚本的过程中,经常有获取脚本位置的需求,比如操作脚本相对位置的资源。但是在实际获取时存在各种问题,网上的资料也常常有所偏颇,比如:

  • 执行方式不同带来的差异,如通过当前 Shell 来执行,即以 source 脚本文件. 脚本文件 的方式执行,导致不能以 $0 来获取
  • pwd 命令只能获取当前工作路径,跟脚本位置无关
  • 一些通过改变当前路径的方式,会导致影响执行环境,不理想
  • 操作系统的差异,如:macOS 或 Linux

本文的方法适用于 bashsh 两种 Shell。

解决方案

# 获取 shell 脚本绝对路径
script_path() {

    # 操作系统类型
    local os_name=$(uname)

    # 脚本名称
    local bash_source_name=${BASH_SOURCE[0]}

    local script_file=''

    # Linux 系统通过 readlink 来获取脚本文件完整路径
    if [[ "${os_name}" == "Linux" ]]; then
        script_file=$(readlink -f "${bash_source_name}")
    fi

    # macOS 系统(也可以通过 brew install coreutils 安装 greadlink 的方式解决)
    if [[ "${os_name}" == "Darwin" ]]; then
        # 如果以 / 开头则认为是绝对路径
        if [[ $(echo ${bash_source_name} | awk '/^\//') == ${bash_source_name} ]]; then
            script_file=${bash_source_name}
        else # 否则在脚本路径前面加上 当前路径
            script_file=$PWD/${bash_source_name}
        fi
    fi

    echo $script_file
}

备选方案

Linux 系统通过 readlink 来获取脚本文件完整路径,但是 macOS 系统的 readlink 没有 -f 参数,所以也可以通过 brew install coreutils 安装 greadlink 的方式解决。

参考资料

(完)

相关文章

  • 获取正在执行 Shell 脚本的绝对路径

    背景 在使用 Shell 脚本的过程中,经常有获取脚本位置的需求,比如操作脚本相对位置的资源。但是在实际获取时存在...

  • shell脚本运行的方式

    Linux中Shell脚本的执行通常有4种方式,分别为:工作目录执行,绝对路径执行,sh执行,Shell环境执行。...

  • shell脚本4种执行方式

    Linux中shell脚本的执行通常有4种方式,分别为工作目录执行,绝对路径执行,sh执行,shell环境执行。脚...

  • shell

    shell获取当前执行脚本的路径

  • 【Shell】获取当前正在执行脚本的绝对路径

    0x01 误区一 使用 pwd 命令,该命令的作用是“print name of current/working ...

  • shell脚本常用语法——获得当前目录

    1 获得shell脚本所在的绝对路径 或者 执行步骤解析: dirname $0: 取得当前执行的脚本文件所在的目...

  • 工具 | Shell 教程笔记 (2)

    Shell 传递参数 在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n 其他用法: 参考 ...

  • shell(三)

    Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一...

  • Shell 传递参数

    执行 Shell 脚本时,可以向脚本传递参数。脚本内获取参数的格式为:$n $0 为执行的文件名 $1 为执行脚本...

  • Shell 传递参数

    Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n代表一个...

网友评论

    本文标题:获取正在执行 Shell 脚本的绝对路径

    本文链接:https://www.haomeiwen.com/subject/zutpgctx.html