45

bashパス内に含まれている可能性のあるシンボリックリンクを逆参照して、任意のパスを取得して標準形式に変換するにはどうすればよいですか?

例えば:

~$ 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ですか?

4

2 に答える 2

65

Andy Skeltonのおかげで、答えはreadlink -f次のようになります。

$:/tmp/symtest$ readlink -f /tmp/symtest/foo/bar/cat
/tmp/symtest/cat
于 2009-07-29T01:48:55.613 に答える
-7

シンボリックリンクを解決する関数は次
のとおりです。本来の目的は、/ usr/binシンボリックリンクが指す呼び出し元のスクリプトへのフルパスを解決することです。

# 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

再帰は使用しませんが、bashで再帰を使用したことはありません。

于 2012-03-24T11:16:30.237 に答える