Solaris中是否有可以获得realpath的实用程序。
cd /home/me/test
realpath .. # got /home/me in linux
我可以在linux中使用realpath,但似乎缺少solaris。
答案 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。
\cd
与cd
一起使用,以防止使用内置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答案的简化版本)
完整路径,已解析符号链接:
完整路径,未解析符号链接:
需要问自己的问题是,$(哪个pwd)?