Linux

在 Linux 和 MacOS 上讀取連結的選項,如果它不是符號連結,它將返回文件路徑

  • March 24, 2022

我有這個:

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

如果它不是符號連結,readlink 將回顯一個空字元串?如果它不是符號連結,是否有一個 readlink 選項只會回顯原始路徑?

對於 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將不列印任何內容並退出並出現錯誤»。

對於這兩個系統,您都可以找到readlinkwith的文件和所有可用選項man readlink

您可以獲得的最接近 OSX 上的通用解決方案的功能類似於此功能

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

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

引用自:https://unix.stackexchange.com/questions/533670