美文网首页
获取运行shell 脚本的绝对路径

获取运行shell 脚本的绝对路径

作者: tafanfly | 来源:发表于2019-07-26 10:44 被阅读0次

    参考来源:https://blog.csdn.net/10km/article/details/51906821


    如何获取当前执行的shell脚本的所在绝对路径,可以用dirname或者readlink实现。

    dirname

    dirname 可以获取一个文件所在的路径,dirname的用处是:

    输出已经去除了尾部的”/”字符部分的名称;如果名称中不包含”/”,
    则显示”.”(表示当前目录)。

    从上面的描述可知道,直接从dirname返回的未必是绝对路径,取决于提供给dirname的参数是否是绝对路径。

     #!/bin/bash
    
     echo $0
     echo $(dirname "$0")
     abspath=$(cd "$(dirname "$0")";pwd)
     echo $abspath
    
    #$ sh test.sh
    test.sh
    .
    /home/tafan/workspace/docker/testing/shell_testing
    
    #$ sh shell_testing/test.sh
    shell_testing/test.sh
    shell_testing
    /home/tafan/workspace/docker/testing/shell_testing
    
     #$ sh /home/tafan/workspace/docker/testing/shell_testing/test.sh
    /home/tafan/workspace/docker/testing/shell_testing/test.sh
    /home/tafan/workspace/docker/testing/shell_testing
    /home/tafan/workspace/docker/testing/shell_testing
    

    从上面的代码中可知$(dirname "$0")不一定指绝对路径,它是根据$0来的。
    正确的写法是配合cd和pwd命令来获取脚本所在绝对路径, 如$(cd "$(dirname "$0")";pwd)

    readlink

    还有一种命令readlink帮助我们获取脚本所在绝对路径。

    image.png

    readlink命令直接获取$0参数的全路径文件名,然后再用dirname获取其所在的绝对路径,如下:

    #!/bin/bash
    
    echo $0
    abspath=$(dirname $(readlink -f "$0"))
    echo $abspath
    
    #$ sh test.sh
    test.sh
    /home/tafan/workspace/docker/testing/shell_testing
    

    相关文章

      网友评论

          本文标题:获取运行shell 脚本的绝对路径

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