Ce que l’intégration au shell facultative du terminal ajoute à un hôte, comment vérifier qu’elle fonctionne, et comment la retirer.
L’application Pulse est en anglais : les noms des boutons et des réglages sont donnés tels qu’ils apparaissent dans l’app.
Dernière mise à jour : 10 septembre 2026.
Cette page fait partie de la section Terminal du manuel.
Par défaut, le terminal retient une commande en observant ce que le shell renvoie en écho pendant que vous tapez. C’est une supposition : une ligne modifiée avec les flèches, un mot complété avec Tab, ou une commande rappelée depuis l’historique du shell lui-même peuvent ressortir faux, et une ligne d’historique obtenue par observation ne porte aucune marque.
L’intégration au shell supprime la supposition. Une fois installée, c’est l’hôte lui-même qui annonce chaque commande exactement telle que le shell s’apprête à l’exécuter, et la ligne dans History affiche un ✓ pour le signaler. Elle est facultative, ne fonctionne qu’en SSH, et l’historique des commandes est une fonction de Pulse Pro.
Pour bash, ces lignes sont ajoutées à la fin de ~/.bashrc :
# 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
Pour zsh, ces lignes sont ajoutées à la fin de ~/.zshrc :
# 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
Chaque bloc n’est ajouté que si ce fichier existe déjà, et seulement s’il ne porte
pas déjà le marqueur # pulse-shell-integration, si bien qu’installer
deux fois ne change rien. Sous bash, si un trap DEBUG est déjà défini (par
iTerm2, VS Code ou bash-preexec, par exemple), le bloc l’enchaîne au lieu de le
remplacer. L’annonce elle-même est une séquence d’échappement de terminal privée,
OSC 7770, qui porte la commande encodée en base64. Elle circule dans votre
session SSH et nulle part ailleurs : rien n’est envoyé nulle part, sinon à votre propre
terminal Pulse.
Connecté à l’hôte en SSH, ouvrez le menu ⋯ et choisissez
Shell integration › Install…. Pulse colle les lignes dans la
session sous forme de deux commandes cat >> … <<'PULSE', une par shell,
et vous les voyez arriver dans le terminal au fil de la frappe. Rien n’est caché.
Elle prend effet à votre prochaine connexion. Le trap est défini quand le shell lit son profil, donc la session depuis laquelle vous avez installé continue comme avant. Déconnectez-vous, reconnectez-vous, et l’hôte commence à annoncer.
Avec bash 5.1 et ultérieur, le collage arrive dans l’éditeur de ligne au lieu de s’exécuter directement ; appuyez sur Retour pour l’exécuter.
Pour vérifier que les lignes sont en place :
grep -n pulse-shell-integration ~/.bashrc ~/.zshrc
Après vous être reconnecté, pour vérifier que le hook est actif :
trap -p DEBUG # bash echo $preexec_functions # zsh
Lancez ensuite n’importe quelle commande et regardez dans History : la ligne devrait porter un ✓.
Connecté, ouvrez le menu ⋯ et choisissez Shell integration ›
Remove…. Pulse supprime le bloc, du marqueur au marqueur de fin, dans chaque
profil (avec sed -i.pulse-bak, qui fonctionne sous macOS et Linux, puis
supprime la sauvegarde). Vous pouvez aussi supprimer les lignes à la main. Supprimer
l’app de votre appareil ne touche pas à l’hôte ; les lignes restent jusqu’à ce que vous
les retiriez.
~/.bashrc ni de ~/.zshrc. L’installation
ignore un shell dont le fichier n’existe pas. Créez-le d’abord
(touch ~/.bashrc) et installez à nouveau..bashrc. Certains
hôtes ne lisent que ~/.profile ou ~/.bash_profile en SSH.
Ajoutez [ -f ~/.bashrc ] && . ~/.bashrc à ~/.profile.sh par défaut
de Synology, par exemple, n’a aucun hook auquel se rattacher. Changez le shell de
connexion avec chsh, ou lancez-en un avec bash -l..bash_profile avant la lecture de .bashrc : le hook reste
inactif sur cette version.L’historique enregistre les lignes de commande que vous lancez, sur votre appareil et dans votre propre iCloud si vous synchronisez. Une ligne que l’hôte n’a pas renvoyée en écho, ce à quoi ressemble une invite de mot de passe, est écartée avant d’être stockée, avec ou sans l’intégration. Ce qui reste sur votre appareil et ce qui en sort est détaillé dans la page de confidentialité.