3.1 KiB
3.1 KiB
Grundlegende Methoden
1. Einfache Variante mit $0
#!/bin/bash
SCRIPT_PATH="$0"
echo "Skript wurde aufgerufen als: $SCRIPT_PATH"
2. Absoluter Pfad des Skripts
#!/bin/bash
SCRIPT_PATH="$(realpath "$0")"
echo "Absoluter Pfad des Skripts: $SCRIPT_PATH"
3. Verzeichnis des Skripts ermitteln
#!/bin/bash
SCRIPT_DIR="$(dirname "$(realpath "$0")")"
echo "Skript-Verzeichnis: $SCRIPT_DIR"
Robuste Lösung für alle Szenarien
#!/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
#!/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
#!/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
# In gesourcten Skripts sollten Sie BASH_SOURCE verwenden
SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
Bei Symlinks
# Auflösung von Symlinks
SCRIPT_PATH="$(readlink -f "$0")"
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"
Praktisches Beispiel
#!/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