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