Solaris中是否有可以获取真实路径的实用程序。
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)"
)
}
一些评论:
虽然函数不是 POSIX,但建议name() { ... }
至少在 ksh 上使用它而不是传统语法,这可能是 Solaris 下最常用的 shell。
\cd
用于 vscd
防止使用cd
shell 内置函数以外的其他内容,然后避免不必要的副作用。
/bin/pwd
用于pwd
作为非内置命令调用,因为它不知道父 shell 是如何到达当前目录的,因此只能获取它的真实路径。
我知道这是一个旧的问答,但在我看来,提供的 realpath 功能有两个缺点。一,它改变了当前的工作目录,这在一次(或多次)调用该函数后可能会令人惊讶。二,它似乎只适用于目录路径。以下可能是一个更通用的功能(我是 bash 用户,只需要脚本,所以我跳过了反斜杠。)
function realpath {
local base=$(basename $1)
local d=$(dirname $1)
(cd $d ; echo $(/bin/pwd)/$base)
}
我在 Solaris 10 平台上遇到了这个问题,这里是找到的答案(包括 jlliagre 答案的简化版本)
完整路径,已解析符号链接:
完整路径,未解析符号链接:
需要问自己的问题是,$(which pwd) ?