Wie um zu überprüfen, ob ein symlink-Ziel entspricht, einen bestimmten Pfad?
Ich bin erstellen Sie ein bash-Skript, um zu überprüfen, ob ein symlink-Ziel entspricht, einen bestimmten Pfad, so dass, falls diese nicht übereinstimmen, Skript löscht den symlink. Ich habe versucht mit readlink
:
#!/bin/env bash
target_path=$HOME/Code/slate/.slate.js
if [ `readlink $HOME/.slate.js` == "$target_path" ]; then
rm -rf "$HOME/.slate.js"
fi
aber es funktioniert nicht:
%source test
test:5: = not found
- readlink $HOME/.slate.js kann nicht wieder genau das gleiche wie $target_path es zurückgeben könnte so etwas wie Code/slate/.slate.js was ist anders als $target_path
- Tut
$HOME
haben einen Platz in es, vielleicht? - echo sowohl von Ihnen zu prüfen, im Moment sind Sie gleich
test
ist wahrscheinlich nicht ein guter name für ein shell-Skript, wie es schon ein shell-built-in-und eine Binär-in/bin
(oder/usr/bin
)...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie doppelte Anführungszeichen verwenden, wie Folgen, wenn Sie strings vergleichen (und ja, die Ausgabe von
readlink $HOME/.slate.js
ist ein string):Im Falle
$target_path
entspricht nicht den link-text genau das, können Sie überprüfen, ob Sie sind in der Tat gleichwertig (unabhängig vom Namen). Aber da ein hardlink ist vorzuziehen, möchten Sie vielleicht zu prüfen, der Fall (siehe unten).Eine allgemeinere Lösung ist:
Oder, wie in deinem Beispiel:
Aber, dass alle davon ausgegangen, dass Ihr
$HOME/.slate.js
ist ein symbolischer link. Wenn es ein hard link (was ist besser, wenn möglich), dann ist es einfacher:Vielleicht etwas (zu prüfen, ob es ein symlink ist, wenn ja, dann prüfen, ob die link-Ziel entspricht; andernfalls prüfen, ob die Dateien gleich sind—entweder einen hard-link oder tatsächlich die gleiche Datei):
Sollten Sie auch überprüfen, ob die Datei ist, in der Tat, die gleiche Datei (und nicht ein hard link), sonst löschen Sie die einzige Kopie.