GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich anhand eines Bash-Skripts feststellen, ob ich mich in einer Tmux-Sitzung befinde?

Ich behalte gerne mein bash_profile in einem Git-Repository und klonen Sie es auf allen Computern, auf die ich Shell-Zugriff habe. Da bin ich in tmux meistens habe ich einen [email protected] Zeichenfolge in der Statuszeile und nicht an ihrer traditionellen Stelle im Shell-Prompt.

Nicht alle Seiten, die ich verwende, haben tmux installiert, oder ich verwende es möglicherweise nicht immer. Ich möchte erkennen, wenn ich mich nicht in einem tmux befinde Sitzung und passen Sie meine Eingabeaufforderung entsprechend an. Bisher meine halbgare Lösung in .bash_profile sieht in etwa so aus:

_display_host_unless_in_tmux_session() {
    # ???
}
export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}'

(Jedes Mal zu überprüfen ist wahrscheinlich nicht der beste Ansatz, daher bin ich offen für Vorschläge für eine bessere Vorgehensweise. Bash-Skripting ist nicht meine Stärke.)

Akzeptierte Antwort:

Tmux setzt den TMUX Umgebungsvariable in tmux-Sitzungen und setzt TERM zum screen . Dies ist kein 100 % zuverlässiger Indikator (z. B. können Sie nicht leicht erkennen, ob Sie screen ausführen innerhalb von tmux oder tmux im screen ), aber es sollte in der Praxis gut genug sein.

if ! { [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; } then
  PS1="@$HOSTNAME $PS1"
fi

Wenn Sie das in einen komplexen Eingabeaufforderungssatz über PROMPT_COMMAND integrieren müssen (was übrigens eine Bash-Einstellung ist und daher nicht exportiert werden sollte):

if [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; then
  PS1_HOSTNAME=
else
  PS1_HOSTNAME="@$HOSTNAME"
fi
PROMPT_COMMAND='PS1="$PS1_HOSTNAME…"'

Falls Sie jemals testen müssen, ob tmux installiert ist:

if type tmux >/dev/null 2>/dev/null; then
  # you can start tmux if you want
fi

Übrigens, das sollte alles in ~/.bashrc gehen , nicht ~/.bash_profile (siehe Unterschied zwischen .bashrc und .bash_profile). ~/.bashrc wird in jeder Bash-Instanz ausgeführt und enthält Shell-Anpassungen wie Eingabeaufforderungen und Aliase. ~/.bash_profile wird ausgeführt, wenn Sie sich anmelden (wenn Ihre Anmelde-Shell Bash ist). Seltsamerweise liest bash ~/.bashrc nicht in Login-Shells, also Ihr ~/.bash_profile sollte enthalten

case $- in *i*) . ~/.bashrc;; esac

Linux
  1. Wie debuggt man ein Bash-Skript?

  2. Wie kann ich von der Befehlszeile aus feststellen, auf welcher Version von Os X ich mich befinde?

  3. Wie werden Parameter eingestellt, wenn Bash-Skript an Bash übergeben wird?

  4. Bash + So beenden Sie beide Male das sekundäre Skript und das Hauptskript

  5. So führen Sie Python-Skripte von der Shell aus

So führen Sie ein Bash-Skript aus {7 Methoden}

So schreiben Sie ein Bash-Skript mit Beispielen

Bash Break:So verlassen Sie eine Schleife

Verhindern, dass ein Bash-Skript gleichzeitig ausgeführt wird

So führen Sie ein Bash-Skript aus

Wie bekomme ich eine Netzmaske von Bash?