如果$target_path
与链接文本不完全匹配,您可以检查它们实际上是否等效(无论名称如何)。但由于硬链接更可取,您可能也想检查这种情况(见下文)。
更通用的解决方案是:
[ "$(readlink $HOME/.slate.js)" -ef "$target_path" ]
或者,如您的示例所示:
target_path=$HOME/Code/slate/.slate.js
if [ "`readlink $HOME/.slate.js`" -ef "$target_path" ]; then
rm -rf "$HOME/.slate.js"
fi
但这一切都假设你$HOME/.slate.js
是一个符号链接。如果它是硬链接(如果可能的话,这是可取的),那么它更简单:
… [ "$HOME/.slate.js" -ef "$target_path" ] …
可能类似于(检查它是否是符号链接,如果是,则检查链接是否与目标匹配;否则检查文件是否相同——硬链接或实际上是相同的文件):
… [ \( -L "$HOME/.slate.js" -a "`readlink $HOME/.slate.js`" -ef "$target_path" \) \
-o \( "$HOME/.slate.js" -ef "$target_path" \) ] …
您还应该检查该文件是否实际上是同一个文件(而不是硬链接),否则您将删除一个并且只有副本。