realpath命令可以完全被readlink命令替代吗?

realpath命令可以完全被readlink命令替代吗?

鉴于该realpath命令不存在于每个 UNIX 平台,我想realpathreadlink命令替换,以使我的 shell 脚本尽可能跨平台。

问题是它realpath具有--relative-to我的情况所需的参数:

$ realpath bdd/full --relative-to bdd
full

另一方面,readlink似乎只提供命令的主要功能realpath

$ readlink -f bdd/full
/home/user/bdd/full

读完后手册页,我找不到任何类似的参数--relative-to

您是否知道是否readlink支持--relative-to类似功能,如果不支持,是否有任何“干净”的方法可以使用readlink或任何其他跨平台命令来实现此类功能?

更新:

就我而言,--relative-to出于日志记录的目的,在我的 shell 脚本中,用户传递两个相对路径:基本文件夹的相对路径和将执行操作的文件的相对路径。为了打印更人性化的日志条目,我想从基本文件夹路径打印文件的相对路径。

我目前正在使用以下函数来实现我的目标:

get_relative_path () {
  if command -v realpath &> /dev/null
  then
    realpath --relative-to="${2-$PWD}" "$1"
  else
    python -c 'import os.path, sys;print os.path.relpath(sys.argv[1],sys.argv[2])' "$1" "${2-$PWD}"
  fi
}

相关内容