回答:
link=/var/opt/foo
target=$(readlink "$link")
$target
ファイルシステムに格納されたとおりに、リンクのターゲットになります。
ただし、シンボリックリンクは相対的なものになる可能性があるため、通常の使用にはこれが適しています。
target=$(readlink -f "$link")
これはreadlink
、BSDおよび他のシステムには存在しない可能性があるGNU Coreutilsから使用することに注意してください。
編集: readlink -f
リンクターゲットが存在する限り、BSDで動作します。realpath
BSD専用の別のツールであり、同様に機能します。
-f
、readlink -f
同様に機能します(リンクターゲットが存在する場合)。BSDでは、realpath
のもう1つの代替手段のようreadlink -m
です。
1つの方法は(私はより良いバージョンを望んでいます)
olddir=$(pwd)
cd /var/opt/foo
deleteme=$(pwd)
cd $olddir
rm -rf "$olddir"
readlink
あなたの友だちです。
readlink()
4.2BSDの時代からシステムコールがありました。現在のBSDsのreadlink
ユーティリティはFreeBSD 4.10でリリースされました。stat
コマンドのハードリンクとして(再)実装されました(MacOS Xマニュアルページ FreeBSD 9マニュアルページ)。-m
オプションがないことに注意してください。