## Grundlegende Methoden ### 1. Einfache Variante mit `$0` ```bash #!/bin/bash SCRIPT_PATH="$0" echo "Skript wurde aufgerufen als: $SCRIPT_PATH" ``` ### 2. Absoluter Pfad des Skripts ```bash #!/bin/bash SCRIPT_PATH="$(realpath "$0")" echo "Absoluter Pfad des Skripts: $SCRIPT_PATH" ``` ### 3. Verzeichnis des Skripts ermitteln ```bash #!/bin/bash SCRIPT_DIR="$(dirname "$(realpath "$0")")" echo "Skript-Verzeichnis: $SCRIPT_DIR" ``` ## Robuste Lösung für alle Szenarien ```bash #!/bin/bash # Funktion zur sicheren Ermittlung des Skript-Pfads get_script_path() { local source="${BASH_SOURCE[0]}" # Auflösung von Symlinks while [ -h "$source" ]; do local dir="$(cd -P "$(dirname "$source")" && pwd)" source="$(readlink "$source")" [[ $source != /* ]] && source="$dir/$source" done echo "$(cd -P "$(dirname "$source")" && pwd)" } SCRIPT_DIR="$(get_script_path)" SCRIPT_NAME="$(basename "$0")" SCRIPT_FULL_PATH="$SCRIPT_DIR/$SCRIPT_NAME" echo "Skript-Verzeichnis: $SCRIPT_DIR" echo "Skript-Name: $SCRIPT_NAME" echo "Vollständiger Pfad: $SCRIPT_FULL_PATH" ``` ## Häufige Anwendungsfälle ### Relative Pfade vom Skript-Verzeichnis aus ```bash #!/bin/bash SCRIPT_DIR="$(dirname "$(realpath "$0")")" # Zugriff auf andere Dateien relativ zum Skript CONFIG_FILE="$SCRIPT_DIR/config.conf" LOG_DIR="$SCRIPT_DIR/logs" # Prüfen ob Konfigurationsdatei existiert if [ -f "$CONFIG_FILE" ]; then echo "Konfiguration gefunden: $CONFIG_FILE" fi ``` ### Einbindung anderer Skripts ```bash #!/bin/bash SCRIPT_DIR="$(dirname "$(realpath "$0")")" # Andere Skripts aus dem gleichen Verzeichnis einbinden source "$SCRIPT_DIR/common_functions.sh" source "$SCRIPT_DIR/config.sh" ``` ## Wichtige Unterschiede der Variablen | Variable | Beschreibung | Beispiel | |----------|--------------|----------| | `$0` | Aufruf-Name des Skripts | `./script.sh` oder `/path/script.sh` | | `${BASH_SOURCE[0]}` | Tatsächlicher Pfad (auch bei sourcing) | `/absolute/path/script.sh` | | `$(dirname "$0")` | Verzeichnis des Aufrufs | `.` oder `/path` | | `$(realpath "$0")` | Absoluter, aufgelöster Pfad | `/absolute/path/script.sh` | ## Besondere Situationen ### Bei gesourcten Skripts ```bash # In gesourcten Skripts sollten Sie BASH_SOURCE verwenden SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")" ``` ### Bei Symlinks ```bash # Auflösung von Symlinks SCRIPT_PATH="$(readlink -f "$0")" SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" ``` ## Praktisches Beispiel ```bash #!/bin/bash # setup.sh - Installationsskript # Ermittlung des Skript-Verzeichnisses SCRIPT_DIR="$(dirname "$(realpath "$0")")" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" echo "Starte Installation..." echo "Skript-Verzeichnis: $SCRIPT_DIR" echo "Projekt-Root: $PROJECT_ROOT" # Installation von Abhängigkeiten pip install -r "$PROJECT_ROOT/requirements.txt" # Kopieren von Konfigurationsdateien cp "$SCRIPT_DIR/templates/config.ini" "$PROJECT_ROOT/config/" echo "Installation abgeschlossen!" ``` ## Tags #bash #scripting #pfade #entwicklung ## Verwandte Themen - [[BASH Grundlagen]] - [[Dateisystem Navigation]] - [[Skript Entwicklung Best Practices]]