ubuntuusers.de

symbolischer Link funktioniert nicht

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

ryu2k6

Anmeldungsdatum:
14. Juni 2009

Beiträge: 271

Hi Leute,

Bin gerade dabei ein Script zu installation zu schreiben. Allerdings habe ich ein Problem mit einem symbolischen Link.

Habe es soweit hinbekommen, er will setzt auch den Link, allerdings geht er nur bis ins Verzeichnis $url als application_root und nicht /srv/www/virtualhost/$url/abc

1
2
3
4
5
6
7
echo "Bitte geben Sie ihre URL an"
read url
echo "Ihre URL lautet:$url"
mkdir -p /srv/www/virtualhost/$url/abc/1
application_root="/srv/www/virtualhost/$url/abc"
cd `dirname $application_root`
ln -s `dirname $application_root`/1 2 

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

ryu2k6 schrieb:

allerdings geht er nur bis ins Verzeichnis $url als application_root und nicht /srv/www/virtualhost/$url/abc

Genau das macht ja auch dirname:

1
ln -s `dirname $application_root`/1 2 

Es löscht das letzte Element vom Pfad, also in dem Fall "abc".

ryu2k6

(Themenstarter)

Anmeldungsdatum:
14. Juni 2009

Beiträge: 271

Super vielen Dank 👍

Sollte vorher die MAN-Pages lesen 😉

*Gelöst*

P.S Post 200

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

Achtung, bitte auf das Quoting achten, sonst kann es Ärger mit Sonder- und Leerzeichen geben:

1
2
3
4
5
6
echo "Bitte geben Sie ihre URL an"
read url
echo "Ihre URL lautet:$url"
application_root="/srv/www/virtualhost/$url/abc"
mkdir -p "$application_root/1" \
&& ln -s 1 "$application_root/2"

Wa sich sonst noch geändert habe

  • Variable nur einmal definiert und mehrfach genutzt

  • Softlink in einen relativen Link umgewandelt (kommt darauf an, was Du willst, hat aber gewisse Vorteile beim Verschieben und Kopieren des Verzeichnisbaums)

  • den cd rausgeworfen

  • den ln abhängig von einem erfolgreichen mkdir gemacht

Ciao

robert

ryu2k6

(Themenstarter)

Anmeldungsdatum:
14. Juni 2009

Beiträge: 271

Wenn ich zwischen Zeile 4 und 5 unzip habe mache ich das dann so ?

1
2
3
4
5
6
7
echo "Bitte geben Sie ihre URL an"
read url
echo "Ihre URL lautet:$url"
application_root="/srv/www/virtualhost/$url/abc"
mkdir -p "$application_root/1" \
&& unzip app.zip -d $application_root \
&& ln -s 1 "$application_root/2"

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

ryu2k6 schrieb:

Wenn ich zwischen Zeile 4 und 5 unzip habe mache ich das dann so ?

1
2
3
4
5
6
7
echo "Bitte geben Sie ihre URL an"
read url
echo "Ihre URL lautet:$url"
application_root="/srv/www/virtualhost/$url/abc"
mkdir -p "$application_root/1" \
&& unzip app.zip -d $application_root \
&& ln -s 1 "$application_root/2"

Ich würde $application_root noch quoten. Aber ansonsten ja, das könnte so gehen.

Ciao

robert

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Könntest du so machen; kommt darauf an, was du erreichen willst.

Das '&&' stellt sicher, dass ein Befehl nur ausgeführt wird, wenn der vorherige Befehl erfolgreich war. Ist das ln nur dann sinnvoll, wenn unzip erfolgreich war?

Nur halt: Die Bash und einige andere Shells haben die nervige Angewohnheit Variablen bei der Variablen-Expansion zu splitten, wenn sie Leerzeichen enthalten. Bedingt dadurch kann die Zeile 6 eine andere Semantik haben, als von dir intendiert und zwar dann, wenn mindestens $url ein Leerzeichen ethält. In dem Fall würde die Zeile wohl einen Fehler produzieren.

Umgehen kannst du, wie schon rklm vorschlug durch explizites Quotieren der Variable, damit die Bash das nicht splittet:

&& unzip app.zip -d "$application_root" \

Die Frage ist vielleicht auch, ob das Skript nur von dir oder auch von anderen benutzt werden soll. Wenn von anderen, würde sich empfehlen noch Fehlermeldungen einzubauen, falls etwas schief geht.

Generell kann man das einfach so machen:

...
if ! mkdir -p "$application_root/1"
then
  echo "Konnte Ordner nicht anlegen: $application_root. Breche ab"
  exit 1
fi
unzip ...

ryu2k6

(Themenstarter)

Anmeldungsdatum:
14. Juni 2009

Beiträge: 271

folgende Fehlermeldung erscheint:

1
2

ln: Symbolischen Verknüpfung „2“ konnte angelgt werden: Die Datei existiert bereits

Update:

Hat sich erledigt, habe den Fehler gefunden ☺

Habe nur vergessen zu speichern 😳

Antworten |