获取脚本执行的目录名称

19 浏览
0 Comments

获取脚本执行的目录名称

我有一些脚本,它在其周围的目录中使用文件。它使用dirname $0命令。它应该可以在运行该脚本的任何目录中工作,但当我运行指向该脚本的符号链接时,我得到的是符号链接的路径,而不是脚本本身的路径。有人知道如何获取脚本所在的运行路径吗?

0
0 Comments

在编写脚本时,有时需要获取脚本所在的目录名。然而,获取脚本所在目录名的方法并不直观,因此需要找到解决方法。

一种解决方法是使用realpath命令。如果已经安装了realpath,可以通过以下命令获取脚本所在的目录名:$(dirname $(realpath $0))

这个方法的原理是首先使用realpath命令获取脚本的绝对路径,然后使用dirname命令获取该路径的父目录名。

这个方法的优点是简单易懂,只需要一行命令即可获取脚本所在的目录名。然而,它的缺点是需要依赖realpath命令,如果没有安装realpath,则无法正常使用。

因此,如果没有安装realpath,可以考虑其他解决方法。

0
0 Comments

在上述内容中,作者提出了一个更简单的解决方案来获取脚本执行的目录名称。通过使用以下命令可以实现:

dirname $(readlink -f $0)

作者在Ubuntu 14.04上进行了测试,并提供了一个示例来解释这个解决方案的工作原理。在示例中,which java命令返回/usr/bin/java,这是一个符号链接。然后,通过运行readlink -f `which java`命令,可以获取到实际的Java可执行文件路径:/usr/lib/jvm/java-8-oracle/jre/bin/java。最后,通过运行dirname $(readlink -f `which java`)命令,可以获取到包含"java"的文件夹路径:/usr/lib/jvm/java-8-oracle/jre/bin。这就是脚本所在的目录。

这是作者最终采用的解决方案,因为它更简单,并且适用于符号链接或文件。

0
0 Comments

原因:在编写脚本时,有时需要获取脚本所在的目录路径,以便在脚本中执行相关操作。然而,脚本所在的目录路径并不直接可用,需要经过一些处理才能获取。

解决方法:下面的代码可以获取脚本所在的目录路径。

if [ -L $0 ] ; then
    ME=$(readlink $0)
else
    ME=$0
fi
DIR=$(dirname $ME)

解析:

- 首先,通过判断`$0`是否是一个符号链接来决定如何处理。如果是符号链接,则使用`readlink`命令获取真实路径并赋值给变量`ME`;如果不是符号链接,则直接将`$0`的值赋给`ME`。

- 然后,使用`dirname`命令获取`ME`的目录部分,并赋值给变量`DIR`。

这样,变量`DIR`就存储了脚本所在的目录路径,可以在脚本中使用。

0