GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit, zda jsem v relaci Tmux ze skriptu Bash?

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

Linux
  1. Jak zjistit, jakou verzi OS X používám z příkazového řádku?

  2. Jak volat funkci Bash ve skriptu Bash uvnitř Awk?

  3. Bash + Jak opustit sekundární skript a hlavní skript v obou případech?

  1. Jak spouštět skripty Pythonu ze shellu

  2. Jak rozdělit řetězec ve skriptu Bash

  3. Jak předat parametry skriptu Bash?

  1. Jak ladit Bash skript?

  2. Spusťte bash skript z adresy URL

  3. Jak spustit bash skript?