有没有少暴力的方式来做到这一点?

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

我坚持使用ksh但我们更希望在bash太有效的解决方案(我认为这样做)。

有帮助吗?

解决方案

条目#28 在bash的常见问题:

  

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

     

有两个主要的原因,为什么这个问题来了:要么你要外部化的数据或脚本的配置和需要一种方法来找到这些外部资源,或者你的脚本意在某种形式的捆绑作用(如。一个构建脚本),并需要找到资源时采取行动。

     

认识到,在一般情况下,这个问题没有解决方案是非常重要的。你可能听说过的任何方法,并且将在下文详述的任何方法,有缺陷,只会在特定的情况下工作。首先,尽量避免问题完全由不依赖于你的脚本的位置!

     

...

     

使用BASH_SOURCE

     

在BASH_SOURCE内部的bash变量实际上是路径名的阵列。如果展开它作为一个简单的字符串,例如“$ BASH_SOURCE”,你会得到的第一个元素,这是当前正在执行的函数或脚本的路径名。

其他提示

我一直在做的:

SCRIPT_PATH=$(cd `dirname ${0}`; pwd)

我从未使用过的readlink前:它不仅是牛羚? (即它会在HP-UX,AIX和Solaris开箱的?DIRNAME和pwd意愿....)

(编辑追加``我忘了原来的职位。D'哦!) (编辑2把两行,我当我看着我写剧本以前显然已经一直在做,但没有正确地记住。首先调用都有路径,第二个呼叫消除相对路径) (编辑3固定错字,从工作,回单线防止单线答案!)

为什么我没有想到去尝试这之前我问这个问题?

THIS_SCRIPT=$(/usr/bin/readlink -nf "$0")

巨大的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top