如何从变量读取链接路径?

Sab*_*ima 3 linux bash shell

这总是不返回任何内容: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
Run Code Online (Sandbox Code Playgroud)

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

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

Ama*_*dan 5

首先,readlink 在 Linux 或 OSX 上执行的操作略有不同。用操作系统标记你的问题而不是bash一个更好的主意,特别是因为readlink它不是bash内置的,而是可执行文件。

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

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

ABSDIR=`cd $RELDIR; pwd`
Run Code Online (Sandbox Code Playgroud)

文件需要多做一些工作:

ABSFILE=`cd $(dirname $RELFILE); pwd`/`basename $RELFILE`
Run Code Online (Sandbox Code Playgroud)