Was bedeutet export BIN_DIR=$(cd "$(dirname "$0")" && pwd)?

Antwort vom

**Das setzt die Umgebungsvariable `BIN_DIR` auf den absoluten Pfad des Ordners, in dem das aktuelle Skript liegt.** Praktisch heißt das: Das Skript kann danach zuverlässig Dateien relativ zu seinem eigenen Speicherort finden, egal von welchem Verzeichnis aus du es startest. ## Zerlegt ```bash export BIN_DIR=$(cd "$(dirname "$0")" && pwd) ``` - `"$0"` steht für den Namen bzw. Pfad, mit dem das Skript aufgerufen wurde. - `dirname "$0"` nimmt davon nur das Verzeichnis. Beispiel: Aus `/home/user/script/start.sh` wird `/home/user/script`. - `cd "$(dirname "$0")"` wechselt in genau dieses Verzeichnis. - `pwd` gibt dann den absoluten Pfad dieses Verzeichnisses aus. - `$( ... )` führt den Befehl aus und setzt dessen Ausgabe als Wert ein. - `export BIN_DIR=...` speichert das Ergebnis in der Umgebungsvariable `BIN_DIR`, damit auch Unterprozesse sie sehen. ## Konkretes Beispiel Liegt dein Skript hier: ```bash /opt/meinprojekt/bin/start.sh ``` dann wird daraus: ```bash BIN_DIR=/opt/meinprojekt/bin ``` ## Wichtiger Unterschied Das ist **nicht einfach nur das aktuelle Arbeitsverzeichnis**. Wenn du das Skript aus `/tmp` startest, bleibt `BIN_DIR` trotzdem der Skriptordner. Genau das ist der Zweck. ## Typischer Nutzen Danach kann ein Skript z. B. so arbeiten: ```bash CONFIG="$BIN_DIR/config/app.conf" ``` Dann findet es die Datei auch dann, wenn du das Skript nicht aus dem Projektordner gestartet hast. ## Einschränkung Ganz sauber ist diese Methode nicht in jedem Sonderfall, etwa bei Symlinks. Wenn das Skript über einen symbolischen Link gestartet wird, zeigt `"$0"` oft auf den Linkpfad, nicht zwingend auf den echten Zielordner.

Kategorie: Technik Tags: Shell Bash Pfad