Zusammenfassung
Wenn ich eine neue Tmux-Sitzung erstelle, greift meine Eingabeaufforderung auf eine Standard-Bash-Konfiguration zurück und ich muss sie source ~/.bashrc
für meine angepasste Eingabeaufforderung manuell ausführen.
Analyse
Ich verwende eine RHEL 7-Maschine. Dieses Verhalten ist mir vor einiger Zeit nach einem Bash-Update aufgefallen, aber ich bin erst jetzt dazu gekommen, die Frage zu stellen (und bin mir nicht sicher, bei welchem Update dies auftrat).
Ich habe beispielsweise meine Eingabeaufforderung so angepasst, dass sie folgendermaßen aussieht:
[user@hostname ~]$
Immer wenn ich eine neue Tmux-Sitzung starte, wird scheinbar die Bash-Standardeinstellung verwendet:
-sh-4.2$
Ein schneller Durchlauf source ~/.bashrc
behebt das Problem immer, aber es ist ärgerlich, dass ich das jedes Mal tun muss, wenn ich etwas Kleines beheben möchte. Irgendwelche Ideen, wie ich tmux dazu bringen kann, das wieder automatisch zu tun?
Wenn Sie weitere Informationen benötigen, stehe ich Ihnen gerne zur Verfügung.
tmux.conf
Als Referenz habe ich tmux.conf
unten meine Datei, obwohl man sie kaum als benutzerdefiniert bezeichnen könnte.
setw -g mode-keys vi
# reload tmux.conf
bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"
Antwort1
Dies bezieht sich auf die Bash-Init-Dateien. Standardmäßig ~/.bashrc
wird in eineminteraktiv, ohne AnmeldungShell. Es wird nicht in einer Login-Shell verwendet. Tmux verwendet eineAnmeldeshellstandardmäßig. Daher werden von tmux gestartete Shells übersprungen ~/.bashrc
.
default-command
Shell-BefehlDer Standardwert ist eine leere Zeichenfolge.welches tmux anweist, eine Login-Shell zu erstellenmithilfe des Werts der
default-shell
Option.
Init-Dateien für Bash,
- Login-Modus:
/etc/profile
~/.bash_profile
,~/.bash_login
,~/.profile
(nur das erste, das existiert)
- interaktiv Nicht-Login:
/etc/bash.bashrc
(einige Linux-Betriebssysteme; nicht unter Mac OS X)~/.bashrc
- nicht interaktiv:
- Quelldatei in
$BASH_ENV
- Quelldatei in
Lösung
Die seltsame interaktive Ladeanforderung ohne Anmeldung verwirrt die Leute auch in anderen Situationen. Diebeste Lösungist die Änderung der Ladeanforderung ~/.bashrc
vonnur interaktiv, und genau das tun einige Distributionen, beispielsweise Ubuntu.
# write content below into ~/.profile, or ~/.bash_profile
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Dies sollte die gewünschte Lösung sein. Und ich empfehle jedem Bash-Benutzer, dies im Profil einzurichten.
Aktualisieren: Die obigen Einstellungen wurden von Ubuntu kopiert. Es scheint, dass sie sich dafür entscheiden, .bashrc
eine Login-Shell zu laden, unabhängig davon, ob es sich um eine interaktive Shell handelt oder nicht.
Wenn Sie eine interaktive Shell erkennen möchten, verwenden Sie $PS1
.
if [ -n "$BASH_VERSION" -a -n "$PS1" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Verweise
Antwort2
Soweit ich weiß, wird standardmäßig tmux
eine Login-Shell ausgeführt. Wenn bash
als interaktive Login-Shell aufgerufen wird, sucht es nach ~/.bash_profile
, ~/.bash_login
, und ~/.profile
. Sie müssen also source ~/.bashrc
eine dieser Dateien einfügen.
Eine andere Möglichkeit, dieses Problem zu lösen, besteht darin, in Ihre Datei die folgende Zeile einzufügen .tmux.conf
:
set-option -g default-shell "/bin/bash"
Antwort3
Folgendes hinzufügen zu .tmux.conf
:
set-option -g default-shell "/bin/bash"
NICHTdas gewünschte Ergebnis erzielen.
Erst durch Zugabe wird source "$HOME/.bashrc"
das ~/.bash_profile
gewünschte Ergebnis erzielt.
Dies funktioniert bei einer aktiven Tmux-Sitzung beim Öffnen eines neuen Fensters oder Bereichs sowie beim Trennen und Öffnen einer neuen Tmux-Sitzung.
Getestet auf:
VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
Antwort4
Ändern Sie Ihre $HOME/.tmux.conf
Datei wie folgt:
set-option -g default-shell "/usr/bin/bash"
set-option -g default-command bash
Damit sollte es erledigt sein. Und wenn Sie schon dabei sind, warum legen Sie die Dot-Datei nicht in den $HOME/.config/tmux
Ordner, in den sie gehört, ohne den Punkt? Und fügen Sie Farbausgabe und eine Tastenkombination zum Neuladen hinzu $HOME/.config/tmux/tmux.conf
:
set -g default-terminal "screen256color"
bind r source-file "${HOME}/.config/tmux/tmux.conf"
Wenn tmux -V
< 3.1, fügen Sie einen Alias hinzu, $HOME/.bashrc
um die Konfigurationsdatei von diesem Speicherort zu laden:
alias tmux="tmux -f ${HOME}/.config/tmux/tmux.conf"
Oder machen Sie eine systemweite Konfiguration am /etc/tmux.conf
Standardspeicherort.