Neue tmux-Sessions erzeugen keine bashrc-Datei

17

Zusammenfassung

Wenn ich eine neue tmux-Sitzung erstelle, wird meine Eingabeaufforderung von einer Standard-Bash-Konfiguration abgeleitet und ich muss sie manuell ausführen, source ~/.bashrcum meine benutzerdefinierte Eingabeaufforderung zu erhalten.

Analyse

Ich benutze eine RHEL 7 Maschine. Ich habe dieses Verhalten nach einem Bash-Update vor einiger Zeit bemerkt, bin aber bis jetzt noch nicht dazu gekommen, die Frage zu stellen (und bin mir nicht sicher, um welches Update es sich handelt).

Zum Beispiel habe ich meine Eingabeaufforderung so angepasst, dass sie wie folgt aussieht:

[user@hostname ~]$

Immer wenn ich eine neue tmux-Sitzung starte, wird der scheinbare Bash-Standard verwendet:

-sh-4.2$

Ein kurzer Durchlauf von source ~/.bashrcbehebt immer das Problem, aber es ist ärgerlich, dass ich dies jedes Mal tun muss, wenn ich etwas Kleines reparieren möchte. Irgendwelche Ideen, wie man tmux dazu bringt, dies wieder automatisch zu tun?

Für weitere Informationen stehe ich gerne zur Verfügung.

tmux.conf

Als Referenz habe ich meine tmux.confDatei unten, obwohl es kaum das ist, was Sie als Gewohnheit bezeichnen können.

setw -g mode-keys vi

# reload tmux.conf
bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"
Justin W. Flory
quelle

Antworten:

19

Soweit ich weiß, tmuxläuft standardmäßig eine Login-Shell. Wenn bashals interaktive Login - Shell aufgerufen wird, sucht er nach ~/.bash_profile, ~/.bash_loginund ~/.profile. Sie müssen also source ~/.bashrceine dieser Dateien einfügen.

Eine andere Möglichkeit, dieses Problem zu lösen, besteht darin, .tmux.confdie folgende Zeile in Ihre Datei einzufügen:

set-option -g default-shell "/bin/bash"
andreatsh
quelle
1
Ich habe die source ~/.bashrcZeile zu meiner hinzugefügt , habe .bash_profileversucht , mich aus- und wieder einzuloggen, eine neue tmux-Sitzung zu erstellen, aber keine Änderung. Irgendwelche Ideen?
Justin W. Flory
1
Versuchen Sie, .tmux.confdie Zeile in Ihre Datei einzufügen set-option -g default-shell "/bin/bash". Dies sollte Ihr Problem lösen (zumindest hoffe ich es)!
andreatsh
Nachdem ich meine tmux Konfiguration neu geladen hatte, löste dies mein Problem! Möchten Sie Ihre Antwort ändern oder eine neue erstellen? Ich würde es gerne als akzeptiert markieren. :)
Justin W. Flory
Du bist nett, ich habe meine Antwort schnell geändert!
andreatsh
2
Hinweis für MacOS-Benutzer: Wenn Sie bashüber Homebrew installiert haben und dies nicht funktioniert, wechseln Sie "/bin/bash"zu "/usr/local/bin/bash".
4

Dies hängt mit den Bash-Init-Dateien zusammen. Wird standardmäßig ~/.bashrcin einer interaktiven Shell ohne Anmeldung verwendet . Es wird nicht in einer Login-Shell bezogen. Tmux verwendet standardmäßig eine Login-Shell . Daher werden Shells, die mit tmux gestartet wurden, übersprungen ~/.bashrc.

default-command Shell-Befehl

Die Standardeinstellung ist eine leere Zeichenfolge, die tmux anweist, mit dem Wert der default-shellOption eine Anmeldeshell zu erstellen .

Init-Dateien für Bash,

  1. Anmeldemodus:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(Nur erste, das vorhanden ist )
  2. Interaktives Nicht-Login :
    1. /etc/bash.bashrc (etwas Linux; nicht unter Mac OS X)
    2. ~/.bashrc
  3. nicht interaktiv:
    1. Quelldatei in $BASH_ENV

Lösung

Das seltsame interaktive Laden ohne Anmeldung verwirrt die Menschen auch in anderen Situationen. Die beste Lösung ist , die Ladeanforderung von ~/.bashrcas interactive zu ändern , was genau das ist, was manche Distributionen, wie Ubuntu, tun.

# 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.

Verweise

Simba
quelle
2

Folgendes hinzufügen zu .tmux.conf:

set-option -g default-shell "/bin/bash"

Ergibt NICHT das gewünschte Ergebnis.

Nur wenn eine Addition source "$HOME/.bashrc"zum ~/.bash_profileangestrebten Ergebnis erzielt wird.

Dies funktioniert in einer aktiven tmux-Sitzung, wenn Sie ein neues Fenster oder einen neuen Bereich öffnen, und auch, wenn Sie eine neue tmux-Sitzung trennen und öffnen.

Getestet am:

VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
Andres Salgado
quelle