Entwicklertipp: Konsolenausgabe automatisch in die Zwischenablage kopieren

Kategorie: Linux/Shell-Produktivität
Plattform: Linux (zsh + Konsole/KDE)


Das Problem

Wenn Sie mit KI-Assistenten arbeiten, müssen Sie häufig Terminalausgaben kopieren und in den Chat einfügen. Dies bedeutet normalerweise:

  1. Befehl ausführen

  2. Wählen Sie den Ausgang mit der Maus aus

  3. Kopieren

  4. Wechseln Sie zum Browser

  5. Einfügen

Das sind zu viele Schritte.


Die Lösung: Automatische Erfassung über „preexec“ / „precmd“.

Fügen Sie dies zu Ihrer „~/.zshrc“ hinzu:

# === AUTO-OUTPUT LOGGER ===
# Automatically saves console output to ~/t.txt and copies to clipboard.
# Toggle: set AUTO_CLIPBOARD=true/false
AUTO_CLIPBOARD=true

# Redirect stdout+stderr to ~/t.txt before each command
preexec() {
    case "$1" in
        sudo*|su*) return ;;
        *) exec > >(tee ~/t.txt) 2>&1 ;;
    esac
}


precmd() {
    exec >/dev/tty 2>&1
    if [ "$AUTO_CLIPBOARD" = "true" ] && [ -s ~/t.txt ]; then
        cleaned=$(cat ~/t.txt \
            | sed 's/\][0-9]*;[^]]*\][0-9]*;//g; s/^[0-9]*;//g' \
            | sed "s|$HOME|~|g" \
            | sed 's/[^[:print:]]//g' \
            | grep -v '^$')
        if [ -n "$cleaned" ]; then
            echo "$cleaned" | xclip -selection clipboard
            echo "[📋 In Zwischenablage kopiert]"
        fi
    fi
}

Dann neu laden:

source ~/.zshrc

Ergebnis

Nach jedem Befehl befindet sich die Ausgabe automatisch in Ihrer Zwischenablage – bereit zum Einfügen in Ihren KI-Chat mit Strg+V.

Die Ausgabe wird außerdem immer als Referenz in „~/t.txt“ gespeichert.


Wie es funktioniert

Teil

Was es tut

preexec()

Wird vor jedem Befehl ausgeführt und leitet die Ausgabe an „~/t.txt“

precmd()

Wird nach jedem Befehl ausgeführt, stellt stdout wieder her und kopiert in die Zwischenablage

tee ~/t.txt

Speichert die Ausgabe in einer Datei und zeigt sie weiterhin im Terminal

`sed ‘…’’

Entfernt KDE-Konsole-Titel-Escape-Sequenzen (]2;... ]1;)

xclip

Kopiert die bereinigte Ausgabe in die Zwischenablage


Anforderungen

# Install xclip if not present
sudo pacman -S xclip       # Manjaro/Arch
sudo apt install xclip     # Ubuntu/Debian

⚠️ Was man NICHT tun sollte

Verwenden Sie nicht „fc -ln -1 |“. bash`, um den letzten Befehl erneut auszuführen:

# ❌ DANGEROUS - do not use!
precmd() {
    output=$(fc -ln -1 | bash 2>&1)  # Re-executes last command!
    echo "$output" | xclip -selection clipboard
}

Dadurch wird jeder Befehl nach Abschluss erneut ausgeführt, was zerstörerische Nebenwirkungen haben kann – zum Beispiel das Überschreiben von Dateien, das erneute Ausführen von „git commit“, das erneute Ausführen von „sed -i“ usw.

Der obige „preexec“/„precmd“-Ansatz erfasst die Ausgabe während der Ausführung – sicher und zuverlässig.