2

Solaris中是否有可以获取真实路径的实用程序。

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)"
  )
}

一些评论:

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

\cd用于 vscd防止使用cdshell 内置函数以外的其他内容,然后避免不必要的副作用。 /bin/pwd用于pwd作为非内置命令调用,因为它不知道父 shell 是如何到达当前目录的,因此只能获取它的真实路径。

于 2012-07-19T06:11:24.163 回答
0

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

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

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

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

  • /usr/bin/pwd -P
  • /bin/pwd(感谢:jlliagre)
  • 真实路径 {linux}

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

  • /usr/bin/密码

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

于 2012-09-25T22:25:44.130 回答