2

这总是什么都不返回:readlink $Somevar. 我可以有"${Somevar}", "$Somevar", $Somevar, 或${Somevar}- 没有区别。我一直在打印Somevar,我知道它具有合理的价值。只需$Somevar在终端输入(一旦我回显/“调试”我的脚本给我相对路径并中止)给我绝对路径。但我需要能够获得脚本中的绝对路径!

是否可以将 readlink 与变量结合使用?坦率地说,我不知道 readlink 是如何“知道”它正在传递一个变量的。我认为即使在脚本中,它也会在调用 readlink 之前由 shell 扩展。我已经用“ ~/_src”在终端(无脚本)中对其进行了测试。它起作用的唯一方法是,如果我不带引号写它。但是,如果我将该值分配给一个变量,我机器上的所有其他函数都可以使用它,但 readlink。

我怎样才能得到绝对路径?我什至不在乎我是否使用 readlink。我只想从脚本中的相对路径获取绝对路径。


更新:(Stackoverflow 评论被破坏)

我标记为 Linux。我要求 readlink 因为我也想翻译符号链接,但我可以在单独的步骤中这样做。

此外,这也失败了:ABSDIR=`cd $RELDIR; pwd`给出

bash: cd: ~/_src/: No such file or directory

(有这样的目录,cd如果我在终端上键入确切的目录名,就会找到它。)我现在猜测它~/是由终端本身扩展的。

那么,有没有办法处理这样的路径?显然,我认为处理这些路径的所有实用程序都在工作,因为终端在调用它们之前扩展了路径。

4

2 回答 2

4

首先,readlink 在 Linux 或 OSX 上做了一些稍微不同的事情。用操作系统标记您的问题而不是bash一个更好的主意,特别是因为readlink它不是bash内置的,而是一个可执行文件。

其次,如果您想获得绝对路径,为什么这不是您问题的标题?

获取目录绝对路径的简单且可移植的方法是

ABSDIR=`cd $RELDIR; pwd`

文件需要做更多的工作:

ABSFILE=`cd $(dirname $RELFILE); pwd`/`basename $RELFILE`
于 2013-07-08T02:24:27.710 回答
2

在 Cygwin 上,我有相同的行为,所以我附加了一些readlink标志,例如-f,它工作正常:

readlink -f $Somevar
于 2013-07-08T13:45:34.330 回答