Files
it-know-how/Linux/BASH Skripte/Zugriff auf den Skript-Pfad in BASH.md
2026-04-21 13:19:11 +02:00

3.2 KiB

Einzeiler

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

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]}")"
# 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

Verwandte Themen