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