Mi piace mantenere il mio bash_profile in un repository git e clonarlo su qualsiasi macchina a cui ho accesso shell. Dato che sono in tmux la maggior parte delle volte ho un [email protected] stringa nella riga di stato, piuttosto che il suo punto tradizionale nel prompt della shell.
Non tutti i siti che utilizzo hanno tmux installato, tuttavia, o potrei non usarlo sempre. Vorrei rilevare quando non sono in un tmux sessione e regolare la mia richiesta di conseguenza. Finora la mia soluzione semicotta in .bash_profile assomiglia a questo:
_display_host_unless_in_tmux_session() {
# ???
}
export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}'
(Controllare ogni volta probabilmente non è l'approccio migliore, quindi sono aperto a suggerimenti per un modo migliore per farlo. Lo scripting Bash non è il mio forte.)
Risposta accettata:
Tmux imposta il TMUX variabile di ambiente nelle sessioni tmux e imposta TERM allo screen . Questo non è un indicatore affidabile al 100% (ad esempio, non puoi facilmente dire se stai eseguendo screen dentro tmux o tmux all'interno dello screen ), ma in pratica dovrebbe essere abbastanza buono.
if ! { [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; } then
PS1="@$HOSTNAME $PS1"
fi
Se è necessario integrarlo in un insieme di prompt complesso tramite PROMPT_COMMAND (che è un'impostazione bash, tra l'altro, quindi non dovrebbe essere esportata):
if [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; then
PS1_HOSTNAME=
else
PS1_HOSTNAME="@$HOSTNAME"
fi
PROMPT_COMMAND='PS1="$PS1_HOSTNAME…"'
Se hai bisogno di verificare se tmux è installato:
if type tmux >/dev/null 2>/dev/null; then
# you can start tmux if you want
fi
A proposito, tutto questo dovrebbe andare in ~/.bashrc , non ~/.bash_profile (vedi Differenza tra .bashrc e .bash_profile). ~/.bashrc viene eseguito in ogni istanza bash e contiene personalizzazioni della shell come prompt e alias. ~/.bash_profile viene eseguito quando accedi (se la tua shell di accesso è bash). Stranamente, bash non legge ~/.bashrc nelle shell di accesso, quindi il tuo ~/.bash_profile dovrebbe contenere
case $- in *i*) . ~/.bashrc;; esac