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

参考来源: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 脚本的绝对路径)