LinuxとMacOSでリンクを読むオプション(シンボリックリンクではない場合はファイルパスを返します)

LinuxとMacOSでリンクを読むオプション(シンボリックリンクではない場合はファイルパスを返します)

私はこれを持っています:

file_path="/actual/file/path"
read_link="$(readlink "$file_path")"  # just in case it's a symlink

readlinkがシンボリックリンクではない場合は、空の文字列をエコーし​​ますか?シンボリックリンクではない場合、元のパスをエコーするreadlinkオプションはありますか?

ベストアンサー1

GNU / Linuxシステムの場合、-fフラグはreadlink--canonicalize)です。 «指定された名前を持つすべてのコンポーネントのすべてのシンボリックリンクを繰り返し追跡して正規化します。»あなたのためにそれをします:

touch /tmp/real
ln -s /tmp/real /tmp/link

readlink -f /tmp/real    # → "/tmp/real"
readlink -f /tmp/link    # → "/tmp/real"

Mac OSXシステムでは、これを行うオプションはありません。 «与えられた引数がシンボリックリンクでない場合、readlink何も印刷されず、エラーで終了します。»。

readlinkどちらのシステムも文書と利用可能なすべてのオプションを見つけることができますman readlink

OSXでユニバーサルソリューションに最も近づくことができる機能は次のとおりです。

readlinkorreal() { readlink "$1" || echo "$1"; }

readlinkorreal /tmp/real    # → "/tmp/real"
readlinkorreal /tmp/link    # → "/tmp/real"

おすすめ記事