我怎样才能确定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