私はこれを持っています:
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"