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.
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.
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.
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.
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.
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.
~/.bashrc oder ~/.zshrc. Die Installation
überspringt eine Shell, deren Datei nicht existiert. Leg sie zuerst an
(touch ~/.bashrc) und installiere erneut..bashrc nicht liest. Manche
Hosts lesen über SSH nur ~/.profile oder ~/.bash_profile.
Füge [ -f ~/.bashrc ] && . ~/.bashrc zu ~/.profile hinzu.sh
von Synology zum Beispiel hat keinen Hook, an den man sich hängen kann. Ändere die Login-Shell
mit chsh oder starte eine mit bash -l..bash_profile gesetzt wird, bevor .bashrc gelesen wird, lässt den Hook
in dieser Version wirkungslos.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.