在solaris shell中获得realpath

时间:2012-07-19 02:30:52

标签: shell solaris

Solaris中是否有可以获得realpath的实用程序。

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

我可以在linux中使用realpath,但似乎缺少solaris。

3 个答案:

答案 0 :(得分:4)

function realpath {
  [ -d "$1" ] && (
      CDPATH= \cd "$1"
      /bin/pwd
  ) || (
      CDPATH= \cd "$(dirname "$1")" &&
          printf "%s/%s\n" "$(/bin/pwd)" "$(basename $1)"
  )
}

一些意见:

虽然函数不是POSIX,但建议至少在ksh上使用它而不是遗留name() { ... }语法,这可能是Solaris下最常用的shell。

\cdcd一起使用,以防止使用内置cd shell内容以外的其他内容,从而避免不必要的副作用。 /bin/pwd用于将pwd作为非内置命令调用,因为它不知道父shell如何转到当前目录,因此只能获取它的真实路径。

答案 1 :(得分:0)

我知道这是一个古老的q& a,但在我看来,提供的realpath函数有两个缺点。一,它改变了当前的工作目录,这可能在一次(或多次)调用该函数后令人惊讶。二,它似乎只适用于目录路径。以下可能是一个更通用的功能(我是一个bash用户,只需要脚本,所以我跳过了反斜杠。)

function realpath {
    local base=$(basename $1)
    local d=$(dirname $1)
    (cd $d ; echo $(/bin/pwd)/$base)
}

答案 2 :(得分:-1)

我在Solaris 10平台上遇到了这个问题,以下是找到的答案(包括jlliagre答案的简化版本)

完整路径,已解析符号链接:

  • / usr / bin / pwd -P
  • / bin / pwd(谢谢:jlliagre)
  • realpath {linux}

完整路径,未解析符号链接:

  • / usr / bin / pwd

需要问自己的问题是,$(哪个pwd)?