Problem
ich dieses Bash-Skript haben:`ln -s` in einem Skript fungiert als` cp`
ACTIVE_DB=$(grep -P "^[ \t]*db.active" config.properties | cut -d= -f2 | tr -s " ")
echo $ACTIVE_DB
if [ "$ACTIVE_DB" = "A" ]
then
ln -sf config-b.properties config.properties
else
ln -sf config-a.properties config.properties
fi
config-a.properties
db.active = A
config-b. Eigenschaften
db.active = B
Wenn ich das Skript ausführen, eine harte co py (= cp
) wird ausgeführt und ist oft kein symbolischer Link (noch ein physikalischer Link für diese Angelegenheit), sondern eine ganz neue Datei mit dem gleichen Inhalt wie config-a.properties
oder config-b.properties
.
$ ls -li
53 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-a.properties
54 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-b.properties
56 -rw-r--r-- 1 ogregoir ogregoir 582 Oct 2 11:28 config.properties
Als ich dies in der Aufforderung Linie manuell durch die Linie, habe ich keine Probleme und ein symbolischer Link ist in der Tat immer erstellt und config.properties
Punkte in Richtung config-a.properties
oder config-b.properties
.
$ ls -li
53 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-a.properties
54 -rw-r--r-- 1 ogregoir ogregoir 582 Sep 30 15:41 config-b.properties
55 lrwxrwxrwx 1 ogregoir ogregoir 20 Oct 2 11:41 config.properties -> config-b.properties
Hinweise
- Keine Datei ist anderswo offen (ich bin der einzige aktive Benutzer und die Anwendung unter Verwendung der Konfiguration läuft nicht).
- Manchmal funktioniert
ln -sf
normal, aber die übliche Regel ist, dass es eine Hardcopy macht. - Das Skript wird von einem anderen Verzeichnis ausgeführt, aber
cd
s in das Verzeichnis, in dem sich dieconfig*.properties
Dateien befinden, bevor die Aktionen hier ausgeführt werden. - Das Skript ist viel länger, aber dies ist das kürzeste Beispiel, das den Fehler reproduziert.
bash
Version ist 4.1.2 (es ist lokal, also kümmere ich mich nicht um Shellshock).ln
Version ist 8.4.- Betriebssystem: Red Hat Enterprise Linux Server Version 6.5 (Santiago).
- Dateisystem für diesen Ordner verwendet: ext4.
Frage
- Warum mein Skript nicht konsequent eine symbolische Verknüpfung erstellen, sondern macht eine Hardcopy?
- Wie erzwinge ich hier einen symbolischen Link?
Der Befehl 'ln' erzeugt * keine * Kopie. Niemals – hek2mgl
Ja, ich kann 'Mann ln' lesen, aber doch tut es ... zufällig! –
Welches Betriebssystem und welches Dateisystem? – Cyrus