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