Solaris に realpath を取得できるユーティリティはありますか。
cd /home/me/test
realpath .. # got /home/me in linux
Linux では realpath を実行できますが、solaris では不足しているようです。
function realpath {
[ -d "$1" ] && (
CDPATH= \cd "$1"
/bin/pwd
) || (
CDPATH= \cd "$(dirname "$1")" &&
printf "%s/%s\n" "$(/bin/pwd)" "$(basename $1)"
)
}
いくつかのコメント:
function は POSIX ではname() { ... }
ありませんが、少なくとも、Solaris で最もよく使用されるシェルである ksh では、従来の構文の代わりに使用することをお勧めします。
\cd
vsシェル組み込みcd
以外のものが使用されるのを防ぎ、cd
望ましくない副作用を回避するために使用されます。
親シェルが現在のディレクトリにどのように移動したかがわからず、その実際のパスしか取得できないため、非組み込みコマンドとして/bin/pwd
呼び出すために使用されます。pwd
これが古い Q&A であることは承知していますが、提供されている realpath 関数には 2 つの欠点があるように思えます。1 つ目は、現在の作業ディレクトリを変更することです。これは、関数を 1 回 (または複数回) 呼び出した後では驚くかもしれません。2 つ目は、ディレクトリ パスに対してのみ機能するようです。以下は、より一般的な関数である可能性があります (私は bash ユーザーであり、これはスクリプトにのみ必要なので、バックスラッシュはスキップしました。)
function realpath {
local base=$(basename $1)
local d=$(dirname $1)
(cd $d ; echo $(/bin/pwd)/$base)
}