シンボリックリンクの宛先が特定のパスを指しているかどうかを確認する方法

シンボリックリンクの宛先が特定のパスを指しているかどうかを確認する方法

Bashスクリプトでは、次の構文を使用してファイルがシンボリックリンクであることを確認できます。

if [ -L $path ]

このパスが特定のパスに接続されているかどうかをテストする方法を知っている人はいますか?たとえば、私が確認したいターゲット$pathはです/some/where

ベストアンサー1

$pathターゲットがシンボリックリンクであることを確認したい場合は、このユーティリティを/some/where使用できます。readlinkPOSIXではありませんが、多くのシステム(GNU / Linux、BusyBox、* BSDなど)で動作します。

if [ "$(readlink -- "$path")" = /some/where ]; then …

これは正確なテキスト比較です。リンクの宛先が/some//whereあるか、where値が$pathある場合、/some/linkテキストは一致しません。

多くのバージョンでは、すべてのシンボリックリンクを拡張してパスを正規化するreadlinkオプションをサポートしています。-f

dash、ksh、bash、zshを含む多くのシェルは、両方のファイルが同じかどうかをテストするための組み込み演算子を-efサポートしますtest(シンボルリンク後に同じファイルへのハードリンク)。この機能も広くサポートされていますが、POSIXはサポートされていません。

if [ "$path" -ef "/some/where" ]; then …

おすすめ記事