J'aime garder mon bash_profile dans un référentiel git et clonez-le sur toutes les machines auxquelles j'ai accès au shell. Depuis que je suis dans tmux la plupart du temps j'ai un [email protected] chaîne dans la ligne d'état, plutôt que son emplacement traditionnel dans l'invite du shell.
Tous les sites que j'utilise n'ont pas tmux installé, ou je ne l'utilise pas toujours. Je voudrais détecter quand je ne suis pas dans un tmux session et ajuster mon invite en conséquence. Jusqu'à présent, ma solution à moitié cuite dans .bash_profile ressemble à ceci :
_display_host_unless_in_tmux_session() {
# ???
}
export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}'
(Vérifier à chaque fois n'est probablement pas la meilleure approche, donc je suis ouvert aux suggestions pour une meilleure façon de procéder. Les scripts bash ne sont pas mon fort.)
Réponse acceptée :
Tmux définit le TMUX variable d'environnement dans les sessions tmux et définit TERM à screen . Ce n'est pas un indicateur fiable à 100 % (par exemple, vous ne pouvez pas savoir facilement si vous utilisez screen dans tmux ou tmux à l'intérieur de l'screen ), mais cela devrait suffire en pratique.
if ! { [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; } then
PS1="@$HOSTNAME $PS1"
fi
Si vous devez intégrer cela dans un ensemble d'invites complexes via PROMPT_COMMAND (qui est un paramètre bash, soit dit en passant, ne devrait donc pas être exporté) :
if [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; then
PS1_HOSTNAME=
else
PS1_HOSTNAME="@$HOSTNAME"
fi
PROMPT_COMMAND='PS1="$PS1_HOSTNAME…"'
Si jamais vous avez besoin de tester si tmux est installé :
if type tmux >/dev/null 2>/dev/null; then
# you can start tmux if you want
fi
Au fait, tout cela devrait aller dans ~/.bashrc , pas ~/.bash_profile (voir Différence entre .bashrc et .bash_profile). ~/.bashrc est exécuté dans chaque instance bash et contient des personnalisations du shell telles que des invites et des alias. ~/.bash_profile est exécuté lorsque vous vous connectez (si votre shell de connexion est bash). Bizarrement, bash ne lit pas ~/.bashrc dans les shells de connexion, donc votre ~/.bash_profile devrait contenir
case $- in *i*) . ~/.bashrc;; esac