#!/bin/zsh # Script Version: 1.5 # Description: Sucht ausschließlich den Alias a='ansible ' in der Zsh-History N=${1:-50} # Anzahl der anzuzeigenden Einträge (Standard: 50) HISTORY_FILE="$HOME/.zsh_history" # Prüfen, ob die History-Datei existiert und lesbar ist if [[ ! -f "$HISTORY_FILE" ]]; then echo "[ERROR] History-Datei nicht gefunden: $HISTORY_FILE" exit 1 elif [[ ! -r "$HISTORY_FILE" ]]; then echo "[ERROR] Keine Leserechte für History-Datei: $HISTORY_FILE" exit 1 fi # Aliase aus der aktuellen Zsh-Umgebung laden if ! source "$HOME/.zshrc" 2>/dev/null; then echo "[WARNING] Konnte .zshrc nicht laden - verwende nur History-Daten" fi # Aliase mit Definitionen erfassen (nur a berücksichtigen) typeset -A ALIAS_DEFS for line in "${(@f)$(alias -L)}"; do if [[ $line =~ ^alias\ ([^=]+)=[\'\"]?(.*)[\'\"]?$ ]]; then name=${match[1]} def=${match[2]} # Nur Alias "a" speichern if [[ $name == "a" ]]; then ALIAS_DEFS[$name]=$def fi fi done # Alias-Namen als Array (nur a) ALIASES=("a") # Falls keine Aliase vorhanden sind, abbrechen if [[ ${#ALIASES[@]} -eq 0 ]]; then echo "[ERROR] Kein Alias 'a' gefunden." exit 1 fi # Alias-Pattern erstellen (nur für a) ALIAS_PATTERN="^a(;|[ \t\n]|$)" # Debug-Ausgabe echo "[DEBUG] Gefundene Aliase: ${(kv)ALIAS_DEFS}" echo "[DEBUG] Verwendetes Alias-Pattern: $ALIAS_PATTERN" # History analysieren mit LC_ALL=C für konsistente Kodierung LC_ALL=C awk -F';' -v aliases="$ALIAS_PATTERN" -v alias_defs="${(j:||:)${(kv)ALIAS_DEFS}}" ' BEGIN { invalid_lines = 0 # Alias-Definitionen parsen if (alias_defs != "") { n = split(alias_defs, pairs, "||") for (i = 1; i <= n; i += 2) { DEFINITIONS[pairs[i]] = pairs[i+1] } } } { if (NF < 2 || $1 !~ /^:[ 0-9]+:[0-9]+$/) { invalid_lines++ next } cmd = substr($0, index($0, ";") + 1) sub(/^[ \t]+/, "", cmd) sub(/[ \t]+$/, "", cmd) if (cmd == "") { invalid_lines++ next } if (cmd ~ aliases) { split(cmd, words, /[ \t;]/) alias_name = words[1] if (alias_name == "a") { # Nur a zählen if (alias_name in CMD) { CMD[alias_name]++ } else { CMD[alias_name] = 1 } count++ } } } END { if (invalid_lines > 0) { print "[WARNING] Ignorierte " invalid_lines " ungültige History-Einträge" > "/dev/stderr" } if (count > 0) { for (a in CMD) { def = (a in DEFINITIONS) ? DEFINITIONS[a] : "undefined" print CMD[a], CMD[a]*100/count "%", a "=" def } } else { print "[ERROR] Keine Aufrufe von a in der History gefunden" > "/dev/stderr" exit 1 } }' "$HISTORY_FILE" | sort -nr | head -n "$N" | column -c4 -s " " -t | nl || { echo "[ERROR] Fehler bei der Verarbeitung der History-Datei" exit 1 }