4

GNUシステムでは、私はただ使用しますreadlink -f $SOME_PATHが、Solarisにはreadlinkがありません。

bashでうまく機能するものがいいのですが、必要に応じて他のプログラムでも問題ありません。

編集:私がこれまでに思いついた最高のものはcdとpwdを使用しますが、ディレクトリだけでなくファイルを処理するためにもう少しハッカーが必要です。

cd -P "$*"
REAL_PATH=`pwd`
4

3 に答える 3

6

やり過ぎかもしれませんが、これはOSに移植可能であり、最初にdirnameまたはbasenameバイナリを見つける必要はありません。このワンライナーは機能します。$origFileが表示されているファイル名を渡すだけです。

perl -e "use Cwd realpath; print realpath(\" $ origFile \ ");"

于 2012-10-17T21:50:38.227 に答える
4

これは役に立ちますか?参照ページから:

canonicalize次の内容で呼び出されるファイルを作成します。

#!/bin/bash
cd -P -- "$(dirname -- "$1")" &&
printf '%s\n' "$(pwd -P)/$(basename -- "$1")"

ファイルを実行可能にします。

chmod +x canonicalize`

そして最後に:

user@host$ canonicalize ./bash_profile
于 2009-08-07T15:10:31.410 に答える
2
#!/bin/bash

# Resolves a full path
# - alternative to "readlink -f", which is not available on solaris
canonicalpath() {
  if [ -d $1 ]; then
    pushd $1 > /dev/null 2>&1
    echo $PWD
  elif [ -f $1 ]; then
    pushd $(dirname $1) > /dev/null 2>&1
    echo $PWD/$(basename $1)
  else
    echo "Invalid path $1"
  fi
  popd > /dev/null 2>&1
}
于 2011-07-02T03:02:46.410 に答える