在 GNU 系统上,我只会使用readlink -f $SOME_PATH
,但 Solaris 没有 readlink。
我更喜欢在 bash 中运行良好的东西,但如果需要,其他程序也可以。
编辑:到目前为止,我想出的最好的方法是使用 cd 和 pwd,但需要更多的技巧来处理文件而不仅仅是目录。
cd -P "$*"
REAL_PATH=`pwd`
可能有点矫枉过正,但这是操作系统可移植的,并且不需要先找到 dirname 或 basename 二进制文件.. 这个单线工作。只需在您看到 $origFile 的地方传入您的文件名:
perl -e "使用 Cwd 真实路径;打印真实路径(\"$origFile\");"
这有帮助吗?从参考页面:
创建一个canonicalize
使用以下内容调用的文件:
#!/bin/bash
cd -P -- "$(dirname -- "$1")" &&
printf '%s\n' "$(pwd -P)/$(basename -- "$1")"
使文件可执行:
chmod +x canonicalize`
最后:
user@host$ canonicalize ./bash_profile
#!/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
}