
realpath
命令が存在しないことを考えるとすべてのUNIXプラットフォームrealpath
、コマンド置換を使用してreadlink
シェルスクリプトをできるだけクロスプラットフォームにしたいと思います。
問題は、私の場合に必要なパラメータ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
ロギング目的でシェルスクリプトでは、ユーザーは2つの相対パス、つまりデフォルトフォルダへの相対パスと、操作が実行されるファイルへの相対パスを渡します。よりユーザーフレンドリーなログエントリを印刷するために、デフォルトのフォルダパスからファイルの相対パスを印刷したいと思います。
現在、目標を達成するために次の機能を使用しています。
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
}