Rád si ponechávám svůj bash_profile v git úložišti a naklonovat jej do všech strojů, ke kterým mám přístup k shellu. Protože jsem v tmux většinou mám [email protected] řetězec ve stavovém řádku, spíše než jeho tradiční místo ve výzvě shellu.
Ne všechny stránky, které používám, mají tmux nainstalovaný, nebo jej nemusím vždy používat. Chci zjistit, kdy nejsem v tmux relaci a podle toho upravím mou výzvu. Zatím moje polovičaté řešení v .bash_profile vypadá asi takto:
_display_host_unless_in_tmux_session() {
# ???
}
export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}'
(Pokaždé kontrolovat pravděpodobně není nejlepší přístup, takže jsem otevřený návrhům na lepší způsob, jak toho dosáhnout. Bash skriptování není moje silná stránka.)
Přijatá odpověď:
Tmux nastavuje TMUX proměnná prostředí v relacích tmux a nastavuje TERM na screen . Toto není 100% spolehlivý indikátor (například nemůžete snadno zjistit, zda používáte screen uvnitř tmux nebo tmux uvnitř screen ), ale v praxi by to mělo stačit.
if ! { [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; } then
PS1="@$HOSTNAME $PS1"
fi
Pokud to potřebujete integrovat do komplexní sady příkazů pomocí PROMPT_COMMAND (což je mimochodem bash nastavení, takže by se nemělo exportovat):
if [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; then
PS1_HOSTNAME=
else
PS1_HOSTNAME="@$HOSTNAME"
fi
PROMPT_COMMAND='PS1="$PS1_HOSTNAME…"'
Pokud budete někdy potřebovat otestovat, zda je nainstalován tmux:
if type tmux >/dev/null 2>/dev/null; then
# you can start tmux if you want
fi
Mimochodem, toto vše by mělo jít do ~/.bashrc , nikoli ~/.bash_profile (viz Rozdíl mezi .bashrc a .bash_profile). ~/.bashrc se spouští v každé instanci bash a obsahuje přizpůsobení prostředí, jako jsou výzvy a aliasy. ~/.bash_profile se spustí, když se přihlásíte (pokud je váš přihlašovací shell bash). Kupodivu bash nečte ~/.bashrc v přihlašovacích shellech, takže váš ~/.bash_profile by měl obsahovat
case $- in *i*) . ~/.bashrc;; esac