
Bashスクリプトでは、次の構文を使用してファイルがシンボリックリンクであることを確認できます。
if [ -L $path ]
このパスが特定のパスに接続されているかどうかをテストする方法を知っている人はいますか?たとえば、私が確認したいターゲット$path
はです/some/where
。
答え1
$path
ターゲットがシンボリックリンクであることを確認したい場合は、このユーティリティを/some/where
使用できます。readlink
POSIXではありませんが、多くのシステム(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 …