如何获取当前shell脚本的完整路径名?

Dan*_*Dan 4 bash ksh pathname

有没有一种蛮力的方式来做到这一点?

#!/bin/ksh
THIS_SCRIPT=$(/usr/bin/readlink -f $(echo $0 | /bin/sed "s,^[^/],$PWD/&,"))
echo $THIS_SCRIPT
Run Code Online (Sandbox Code Playgroud)

我坚持使用,ksh但更喜欢也适用的解决方案bash(我认为这样做).

Ign*_*ams 5

bash常见问题解答中的第28条:

如何确定脚本的位置?我想从同一个地方读取一些配置文件.

出现此问题有两个主要原因:要么想要外部化数据或配置脚本,还需要一种方法来查找这些外部资源,或者您的脚本旨在对某种类型的捆绑进行操作(例如,构建脚本),并需要找到要采取行动的资源.

重要的是要意识到,在一般情况下,这个问题没有解决方案.您可能听说过的任何方法以及下面将详述的任何方法都存在缺陷,并且仅适用于特定情况.首先,尽量不要依赖脚本的位置来避免问题!

...

使用BASH_SOURCE

BASH_SOURCE内部bash变量实际上是一个路径名数组.如果将其展开为简单字符串,例如"$ BASH_SOURCE",您将获得第一个元素,即当前正在执行的函数或脚本的路径名.


Dan*_*ste 5

我一直都这样做:

SCRIPT_PATH=$(cd `dirname ${0}`; pwd)
Run Code Online (Sandbox Code Playgroud)

我之前从未使用过readlink:它只是Gnu吗?(即它是否适用于HP-UX,AIX和Solaris开箱即用?dirname和pwd将......)

(编辑添加``我在原帖中忘记了.d'哦!)(编辑2放两行,当我看到我之前编写的脚本时,我显然总是这么做,但是没有记得正确.第一次调用获取路径,第二次调用消除相对路径)(编辑3个固定错误,阻止单行应答工作,返回单行!)