我怎样才能确定bash中的符号链接?

如何在bash取任何给定的path并将其转换为规范forms,解引用path中可能包含的任何符号链接?

例如:

 ~$ mkdir /tmp/symtest ~$ cd /tmp/symtest/ /tmp/symtest$ mkdir -p foo/bar cat/dog /tmp/symtest$ cd foo/bar/ /tmp/symtest/foo/bar$ ln -s ../../cat cat /tmp/symtest/foo/bat$ cd ../../ /tmp/symtest$ tree . |-- cat | `-- dog `-- foo `-- bar `-- cat -> ../../cat 6 directories, 0 files 

我如何获得/tmp/symtest/foo/bar/cat (即: /tmp/symtest/cat )的完整规范path?

感谢Andy Skelton ,似乎答案是readlink -f

 $:/tmp/symtest$ readlink -f /tmp/symtest/foo/bar/cat /tmp/symtest/cat 

这是一个可以parsing符号链接的函数
最初的目的是parsing/ usr / bin符号链接指向的调用脚本的完整path

 # resolve symbolic links function resolve_link() { local LINK_FILE=${1:-${BASH_SOURCE[0]}} local FILE_TYPE=`file $LINK_FILE | awk '{print $2}'` local LINK_TO=$LINK_FILE while [ $FILE_TYPE = "symbolic" ]; do LINK_TO=`readlink $LINK_FILE` FILE_TYPE=`file $LINK_TO | awk '{print $2}'` done echo $LINK_TO } BASH_SOURCE_RESOLVED=$(resolve_link) echo $BASH_SOURCE_RESOLVED 

它不使用recursion,但是我再也没有使用bashrecursion