在GNU系统上,我只使用readlink -f $SOME_PATH
,但Solaris没有readlink。
我更喜欢在bash中运行良好的东西,但如果需要,其他程序也可以。
编辑:到目前为止,我提出的最佳功能是使用cd和pwd,但需要更多的hackery来处理文件而不仅仅是目录。
cd -P "$*"
REAL_PATH=`pwd`
答案 0 :(得分:6)
可能有点矫枉过正,但这是OS便携式的,并且不需要先找到dirname和basename二进制文件..这个单行程序有效。只需传入你看到$ origFile的文件名:
perl -e“使用Cwd realpath; print realpath(\”$ origFile \“);”
答案 1 :(得分:3)
this有帮助吗?从引用的页面:
使用以下内容创建名为canonicalize
的文件:
#!/bin/bash
cd -P -- "$(dirname -- "$1")" &&
printf '%s\n' "$(pwd -P)/$(basename -- "$1")"
使文件可执行:
chmod +x canonicalize`
最后:
user@host$ canonicalize ./bash_profile
答案 2 :(得分:2)
#!/bin/bash
# Resolves a full path
# - alternative to "readlink -f", which is not available on solaris
canonicalpath() {
if [ -d $1 ]; then
pushd $1 > /dev/null 2>&1
echo $PWD
elif [ -f $1 ]; then
pushd $(dirname $1) > /dev/null 2>&1
echo $PWD/$(basename $1)
else
echo "Invalid path $1"
fi
popd > /dev/null 2>&1
}