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