Me gusta mantener mi bash_profile
en un repositorio de git y clonarlo en cualquier máquina a la que tenga acceso de shell. Ya que estoy en tmux
la mayor parte del tiempo tengo un [email protected]
cadena en la línea de estado, en lugar de su lugar tradicional en el indicador de shell.
No todos los sitios que uso tienen tmux
instalado, sin embargo, o puede que no siempre lo esté usando. Me gustaría detectar cuando no estoy en un tmux
sesión y ajustar mi solicitud en consecuencia. Hasta ahora, mi solución a medias en .bash_profile
se parece a esto:
_display_host_unless_in_tmux_session() {
# ???
}
export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}'
(Verificar cada vez probablemente no sea el mejor enfoque, por lo que estoy abierto a sugerencias para una mejor manera de hacerlo. Bash scripting no es mi fuerte).
Respuesta aceptada:
Tmux establece el TMUX
variable de entorno en sesiones tmux y establece TERM
a screen
. Este no es un indicador 100% confiable (por ejemplo, no puede saber fácilmente si está ejecutando screen
dentro de tmux
o tmux
dentro de screen
), pero debería ser lo suficientemente bueno en la práctica.
if ! { [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; } then
PS1="@$HOSTNAME $PS1"
fi
Si necesita integrar eso en un conjunto de mensajes complejo a través de PROMPT_COMMAND
(que, por cierto, es una configuración bash, por lo que no debe exportarse):
if [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; then
PS1_HOSTNAME=
else
PS1_HOSTNAME="@$HOSTNAME"
fi
PROMPT_COMMAND='PS1="$PS1_HOSTNAME…"'
Si alguna vez necesita probar si tmux está instalado:
if type tmux >/dev/null 2>/dev/null; then
# you can start tmux if you want
fi
Por cierto, todo esto debería ir a ~/.bashrc
, no ~/.bash_profile
(ver Diferencia entre .bashrc y .bash_profile). ~/.bashrc
se ejecuta en cada instancia de bash y contiene personalizaciones de shell, como avisos y alias. ~/.bash_profile
se ejecuta cuando inicia sesión (si su shell de inicio de sesión es bash). Curiosamente, bash no lee ~/.bashrc
en shells de inicio de sesión, por lo que su ~/.bash_profile
debe contener
case $- in *i*) . ~/.bashrc;; esac