这总是不返回任何内容: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
会找到它。)我现在猜测终端本身会扩展~/
。
那么,有没有办法处理这样的路径?显然我认为处理这些路径的所有实用程序都只是工作,因为终端在调用之前扩展了路径。
答案 0 :(得分:4)
首先,readlink在Linux或OSX上略有不同。使用操作系统而不是bash
标记您的问题是一个更好的主意,特别是因为readlink
不是bash
内置的,而是可执行文件。
其次,如果你想获得绝对路径,为什么这不是你问题的标题?
获取目录的绝对路径的简便方法是
ABSDIR=`cd $RELDIR; pwd`
文件还有点工作:
ABSFILE=`cd $(dirname $RELFILE); pwd`/`basename $RELFILE`
答案 1 :(得分:2)
在Cygwin上,我有相同的行为,所以我附加了一些readlink
标志,例如-f
,它运行正常:
readlink -f $Somevar