Shell-Integration

Was die optionale Shell-Integration des Terminals einem Host hinzufügt, wie du siehst, dass sie funktioniert, und wie du sie wieder entfernst.

Die App Pulse ist auf Englisch: Tasten und Einstellungen sind so benannt, wie sie in der App erscheinen.

Zuletzt aktualisiert am 10. September 2026.

Diese Seite gehört zum Abschnitt Terminal des Handbuchs.

Was sie ist

Ab Werk merkt sich das Terminal einen Befehl, indem es beobachtet, was die Shell beim Tippen als Echo zurückgibt. Das ist eine Vermutung: Eine mit den Pfeiltasten bearbeitete Zeile, ein mit Tab vervollständigtes Wort oder ein aus dem eigenen Verlauf der Shell geholter Befehl kann falsch herauskommen, und eine Zeile, die aus dem Beobachten stammt, trägt keine Markierung.

Die Shell-Integration beseitigt das Raten. Einmal installiert, meldet der Host selbst jeden Befehl genau so, wie die Shell ihn gleich ausführen wird, und die Zeile in History zeigt ein ✓, um das anzuzeigen. Sie ist optional, sie funktioniert nur über SSH, und der Befehlsverlauf ist eine Funktion von Pulse Pro.

Was sie hinzufügt

Für bash werden diese Zeilen an ~/.bashrc angehängt:

# pulse-shell-integration
__pulse_announce() { local l n; l=$(HISTTIMEFORMAT= builtin history 1); l=${l#"${l%%[! ]*}"}; n=${l%%[[:space:]]*}; [ -n "$n" ] && [ "$n" != "${__pulse_last-}" ] || return 0; __pulse_last=$n; l=${l#"$n"}; l=${l#"${l%%[! ]*}"}; printf '\033]7770;%s\007' "$(printf %s "$l" | base64 | tr -d '\n')"; }
eval "__pulse_prev=($(trap -p DEBUG))"; __pulse_prev=${__pulse_prev[2]-}
trap "__pulse_announce${__pulse_prev:+; $__pulse_prev}" DEBUG
# pulse-shell-integration end

Für zsh werden diese Zeilen an ~/.zshrc angehängt:

# pulse-shell-integration
__pulse_announce() { printf '\033]7770;%s\007' "$(printf %s "$1" | base64 | tr -d '\n')"; }
autoload -Uz add-zsh-hook && add-zsh-hook preexec __pulse_announce
# pulse-shell-integration end

Jeder Block wird nur angehängt, wenn diese Datei bereits existiert, und nur, wenn sie noch nicht die Markierung # pulse-shell-integration trägt, sodass eine zweite Installation nichts ändert. Ist in bash bereits ein DEBUG-Trap gesetzt (etwa von iTerm2, VS Code oder bash-preexec), verkettet der Block ihn, statt ihn zu ersetzen. Die Meldung selbst ist eine private Terminal-Escape-Sequenz, OSC 7770, die den Befehl base64-kodiert trägt. Sie reist innerhalb deiner SSH-Sitzung und nirgendwo sonst: Nichts wird irgendwohin gesendet außer an dein eigenes Pulse-Terminal.

Installieren

Während du per SSH mit dem Host verbunden bist, öffne das Menü ⋯ und wähle Shell integration › Install…. Pulse fügt die Zeilen als zwei cat >> … <<'PULSE'-Befehle in die Sitzung ein, einen pro Shell, und du siehst zu, wie sie im Terminal ankommen, während sie getippt werden. Nichts ist versteckt.

Sie wirkt ab deiner nächsten Anmeldung. Der Trap wird gesetzt, wenn die Shell ihr Profil liest, deshalb läuft die Sitzung, aus der du installiert hast, weiter wie zuvor. Trenne die Verbindung, verbinde dich erneut, und der Host beginnt, Befehle zu melden.

Ab bash 5.1 landet der eingefügte Text im Zeileneditor, statt sofort ausgeführt zu werden; drück Return, um ihn auszuführen.

Prüfen

Um zu sehen, dass die Zeilen vorhanden sind:

grep -n pulse-shell-integration ~/.bashrc ~/.zshrc

Nach einer erneuten Anmeldung, um zu sehen, dass der Hook aktiv ist:

trap -p DEBUG            # bash
echo $preexec_functions  # zsh

Führe dann irgendeinen Befehl aus und sieh in History nach: Die Zeile sollte ein ✓ tragen.

Entfernen

Während du verbunden bist, öffne das Menü ⋯ und wähle Shell integration › Remove…. Pulse löscht in jedem Profil den Block von der Markierung bis zur Endmarkierung (mit sed -i.pulse-bak, das unter macOS und Linux funktioniert, und entfernt danach die Sicherungskopie). Du kannst die Zeilen auch von Hand löschen. Das Entfernen der App von deinem Gerät berührt den Host nicht; die Zeilen bleiben, bis du sie entfernst.

Bekannte Grenzen

History zeichnet die Befehlszeilen auf, die du ausführst, auf deinem Gerät und in deinem eigenen iCloud, wenn du synchronisierst. Eine Zeile, die der Host nicht als Echo zurückgegeben hat — so sieht eine Passwortabfrage aus —, wird verworfen, bevor sie gespeichert wird, mit oder ohne die Integration. Was auf deinem Gerät bleibt und was es verlässt, steht auf der Datenschutzseite.