有没有一些可以返回 shell 的完整路径的函数?

12 浏览
0 Comments

有没有一些可以返回 shell 的完整路径的函数?

是否有一些本地函数(shell,Linux命令)可以合并/计算完整路径?

示例:

old_path="~/test1/test2/../dir3//file.txt"
new_path=FUN($old_path)
echo "$new_path"   // 我想得到的结果是 "/home/user/test1/dir3/file.txt"    

0
0 Comments

(Is there some shell full path function?)这个问题的出现的原因以及解决方法

原因:使用readlink命令可以获取文件的全路径,包括解析符号链接。然而,如果路径名存储在一个变量中,readlink命令无法正常工作。

解决方法:在变量中使用tilde扩展时,应该使用${HOME}代替。

0
0 Comments

有没有一些完整的路径函数可以使用?

你可以用

new_path=$(eval cd "$old_path"; pwd)

这个命令行来实现。如果你想要解析符号链接,你也可以使用pwd -P。如果你在old_path中使用$HOME而不是~,可以更加方便。然后你就不需要eval了。

或者使用pwd -P。那么eval就是不必要的了。

eval总是需要执行tilde扩展。

幸运的是,我的bash没有读取这个注释,所以它对此并不知情。如果我输入echo $(cd ~/mp3; pwd -P),我会得到/home/glglgl/mp3。如果我将它放入一个变量中,同样的事情会发生。

它是否会改变当前工作路径?

不,它不会。你正在运行一个不同的命令,我建议你实际上将它放在带引号的变量中。如果foo="~"; cd $foo在你的bash中工作,那么它是有问题的。问题在于,在使用$foo时,tilde扩展发生在参数扩展之前。

不,它不会改变当前工作目录,因为cd是在一个子shell中运行的。

0