132 lines
3.1 KiB
Markdown
132 lines
3.1 KiB
Markdown
## 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]] |