GNUシステムでは、私はただ使用しますreadlink -f $SOME_PATH
が、Solarisにはreadlinkがありません。
bashでうまく機能するものがいいのですが、必要に応じて他のプログラムでも問題ありません。
編集:私がこれまでに思いついた最高のものはcdとpwdを使用しますが、ディレクトリだけでなくファイルを処理するためにもう少しハッカーが必要です。
cd -P "$*"
REAL_PATH=`pwd`
やり過ぎかもしれませんが、これはOSに移植可能であり、最初にdirnameまたはbasenameバイナリを見つける必要はありません。このワンライナーは機能します。$origFileが表示されているファイル名を渡すだけです。
perl -e "use Cwd realpath; print realpath(\" $ origFile \ ");"
これは役に立ちますか?参照ページから:
canonicalize
次の内容で呼び出されるファイルを作成します。
#!/bin/bash
cd -P -- "$(dirname -- "$1")" &&
printf '%s\n' "$(pwd -P)/$(basename -- "$1")"
ファイルを実行可能にします。
chmod +x canonicalize`
そして最後に:
user@host$ canonicalize ./bash_profile
#!/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
}