Qué añade a un host la integración opcional del terminal con el shell, cómo ver que funciona y cómo volver a quitarla.
La app Pulse está en inglés: los nombres de botones y ajustes se indican tal como aparecen en la app.
Última actualización: 10 de septiembre de 2026.
Esta página forma parte de la sección Terminal del manual.
De serie, el terminal recuerda un comando observando lo que el shell devuelve como eco mientras escribes. Eso es una suposición: una línea editada con las flechas, una palabra completada con Tab o un comando recuperado del propio historial del shell pueden salir mal, y una fila que procede de esa observación no lleva ninguna marca.
La integración con el shell elimina las suposiciones. Una vez instalada, el propio host anuncia cada comando exactamente como el shell está a punto de ejecutarlo, y la fila de History muestra un ✓ para indicarlo. Es opcional, solo funciona por SSH, y el historial de comandos es una función de Pulse Pro.
Para bash, estas líneas se añaden al final 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
Para zsh, estas líneas se añaden al final 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
Cada bloque se añade solo si ese archivo ya existe, y solo si
no lleva ya el marcador # pulse-shell-integration, así que instalar
dos veces no cambia nada. En bash, si ya hay un trap DEBUG configurado (por
iTerm2, VS Code o bash-preexec, por ejemplo), el bloque lo encadena en lugar de
reemplazarlo. El anuncio en sí es una secuencia de escape privada del terminal,
OSC 7770, que lleva el comando codificado en base64. Viaja dentro de tu
sesión SSH y en ningún otro sitio: no se envía nada a ningún lugar salvo a tu propio terminal
de Pulse.
Mientras estás conectado al host por SSH, abre el menú ⋯ y elige
Shell integration › Install…. Pulse pega las líneas en la
sesión como dos comandos cat >> … <<'PULSE', uno por shell,
y ves cómo llegan al terminal a medida que se escriben. No se oculta nada.
Surte efecto a partir de tu siguiente inicio de sesión. El trap se configura cuando el shell lee su perfil, así que la sesión desde la que instalaste sigue como antes. Desconéctate, vuelve a conectarte y el host empieza a anunciar.
En bash 5.1 y posteriores, el pegado queda en el editor de línea en lugar de ejecutarse directamente; pulsa Intro para ejecutarlo.
Para ver que las líneas están en su sitio:
grep -n pulse-shell-integration ~/.bashrc ~/.zshrc
Después de volver a iniciar sesión, para ver que el hook está activo:
trap -p DEBUG # bash echo $preexec_functions # zsh
Luego ejecuta cualquier comando y mira en History: la fila debería llevar un ✓.
Estando conectado, abre el menú ⋯ y elige Shell integration ›
Remove…. Pulse borra el bloque, desde el marcador hasta el marcador de fin, en cada
perfil (con sed -i.pulse-bak, que funciona en macOS y Linux, y
después elimina la copia de seguridad). También puedes borrar las líneas a mano. Eliminar
la app de tu dispositivo no toca el host; las líneas se quedan hasta que
las quites.
~/.bashrc ni ~/.zshrc. La instalación
omite un shell cuyo archivo no existe. Créalo primero
(touch ~/.bashrc) y vuelve a instalar..bashrc. Algunos
hosts solo leen ~/.profile o ~/.bash_profile por SSH.
Añade [ -f ~/.bashrc ] && . ~/.bashrc a ~/.profile.sh
por defecto de Synology, por ejemplo, no tiene ningún hook al que engancharse. Cambia el shell de inicio de sesión
con chsh, o inicia uno con bash -l..bash_profile antes de que se lea .bashrc deja el hook
inactivo en esa versión.History registra las líneas de comando que ejecutas, en tu dispositivo y en tu propio iCloud si sincronizas. Una línea que el host no devolvió como eco, que es el aspecto que tiene una solicitud de contraseña, se descarta antes de guardarse, con o sin la integración. Lo que se queda en tu dispositivo y lo que sale de él se explica en la página de privacidad.