4

在 GNU 系统上,我只会使用readlink -f $SOME_PATH,但 Solaris 没有 readlink。

我更喜欢在 bash 中运行良好的东西,但如果需要,其他程序也可以。

编辑:到目前为止,我想出的最好的方法是使用 cd 和 pwd,但需要更多的技巧来处理文件而不仅仅是目录。

cd -P "$*"
REAL_PATH=`pwd`
4

3 回答 3

6

可能有点矫枉过正,但这是操作系统可移植的,并且不需要先找到 dirname 或 basename 二进制文件.. 这个单线工作。只需在您看到 $origFile 的地方传入您的文件名:

perl -e "使用 Cwd 真实路径;打印真实路径(\"$origFile\");"

于 2012-10-17T21:50:38.227 回答
4

有帮助吗?从参考页面:

创建一个canonicalize使用以下内容调用的文件:

#!/bin/bash
cd -P -- "$(dirname -- "$1")" &&
printf '%s\n' "$(pwd -P)/$(basename -- "$1")"

使文件可执行:

chmod +x canonicalize`

最后:

user@host$ canonicalize ./bash_profile
于 2009-08-07T15:10:31.410 回答
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
}
于 2011-07-02T03:02:46.410 回答