在Solaris中是否有可以获得实际路径的实用程序?在solaris shell中获取实际路径
cd /home/me/test
realpath .. # got /home/me in linux
我可以在linux上做realpath,但是在solaris上似乎没有。
在Solaris中是否有可以获得实际路径的实用程序?在solaris shell中获取实际路径
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,建议用它代替至少在KSH传统name() { ... }
语法这可能是在Solaris下最常用的外壳。
\cd
用于vs cd
以防止其他物质使用壳内建物,然后避免不需要的副作用。 /bin/pwd
用于调用pwd
作为非内建命令,因为它不知道父shell如何进入当前目录,因此只能得到它的真实路径。
我就遇到了这个在Solaris 10平台上,这里是找到了答案(包括jlliagre的答案的简化版本)
完整路径,以及符号链接解析:
全路径,没有符号链接解析:
一个需要问自己的问题是,$(其中PWD)?
Solaris pwd binary不带任何参数,/ usr/bin/pwd -P严格等同于/ usr/bin/pwd和'/ bin/pwd。 – jlliagre 2012-10-25 10:06:00
我知道这是一个旧的q & a,但在我看来,提供的realpath函数有两个缺点。一,它改变当前的工作目录,这可能在一次(或多次)调用该函数后出人意料。二,它似乎只适用于目录路径。可能是一个比较普遍的功能如下(我是一个bash用户,只需要这个脚本,所以我跳过了backslashing。)
function realpath {
local base=$(basename $1)
local d=$(dirname $1)
(cd $d ; echo $(/bin/pwd)/$base)
}
感谢您指出我以前的答案缺点。请注意,当路径组件包含空格时,您的建议将会中断。 – jlliagre 2015-06-18 06:15:34
三思之后,我原来的问题是“真实路径”替代。所以jliagre的回答是正确的。 – 2012-10-25 01:56:30