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