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:
Befehl ausführen
Wählen Sie den Ausgang mit der Maus aus
Kopieren
Wechseln Sie zum Browser
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 |
|---|---|
|
Wird vor jedem Befehl ausgeführt und leitet die Ausgabe an „~/t.txt“ |
|
Wird nach jedem Befehl ausgeführt, stellt stdout wieder her und kopiert in die Zwischenablage |
|
Speichert die Ausgabe in einer Datei und zeigt sie weiterhin im Terminal |
`sed ‘…’’ |
Entfernt KDE-Konsole-Titel-Escape-Sequenzen ( |
|
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.