参考来源: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
帮助我们获取脚本所在绝对路径。
用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
网友评论