2

Solaris に realpath を取得できるユーティリティはありますか。

cd /home/me/test
realpath ..  # got /home/me in linux

Linux では realpath を実行できますが、solaris では不足しているようです。

4

3 に答える 3

4
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 では、従来の構文の代わりに使用することをお勧めします。

\cdvsシェル組み込みcd以外のものが使用されるのを防ぎ、cd望ましくない副作用を回避するために使用されます。 親シェルが現在のディレクトリにどのように移動したかがわからず、その実際のパスしか取得できないため、非組み込みコマンドとして/bin/pwd呼び出すために使用されます。pwd

于 2012-07-19T06:11:24.163 に答える
0

これが古い Q&A であることは承知していますが、提供されている realpath 関数には 2 つの欠点があるように思えます。1 つ目は、現在の作業ディレクトリを変更することです。これは、関数を 1 回 (または複数回) 呼び出した後では驚くかもしれません。2 つ目は、ディレクトリ パスに対してのみ機能するようです。以下は、より一般的な関数である可能性があります (私は bash ユーザーであり、これはスクリプトにのみ必要なので、バックスラッシュはスキップしました。)

function realpath {
    local base=$(basename $1)
    local d=$(dirname $1)
    (cd $d ; echo $(/bin/pwd)/$base)
}
于 2015-06-16T15:19:32.093 に答える