.bashrc / .profile wird nicht in eine neue tmux-Sitzung (oder ein neues Fenster) geladen - warum?

94

Wenn tmux ein neues Fenster startet oder öffnet, wird mein .profileoder nicht geladen .bashrc. Am Ende schreibe ich . ~/.bashrcjedes Mal. Gibt es eine Möglichkeit, dies automatisch zu erreichen?

John Smith
quelle

Antworten:

146

Ja, am Ende von .bash_profilesetzen Sie die Zeile:

. ~/.bashrc

Dadurch wird die RC-Datei automatisch unter den Umständen abgerufen, unter denen normalerweise nur das Profil verarbeitet wird.

Die Regeln bashfür die Ausführung bestimmter Dateien sind kompliziert und hängen von der Art der zu startenden Shell (Anmeldung / Nichtanmeldung, interaktiv oder nicht usw.) sowie von Befehlszeilenargumenten und Umgebungsvariablen ab.

Sie können sie in der man bashAusgabe sehen, suchen INVOCATIONSie einfach nach - Sie werden wahrscheinlich etwas Zeit brauchen, um sie zu verdauen und zu dekodieren :-)

paxdiablo
quelle
2
Das Problem bei dieser Lösung ist, dass .bashrc auf einigen Systemen .bash_profile aufruft.
Honza
1
Lassen Sie mich mich korrigieren: Systeme haben keinen .bashrc-Aufruf von .bash_profile, aber Sie müssen sicherstellen, dass Sie es nicht selbst tun.
Honza
1
@ Honza, das wäre ein sehr ungewöhnliches Setup, da es fast immer umgekehrt ist. Jemand könnte es sicherlich so arrangieren, aber wir
müssten
2
In der Tat stellte sich heraus, dass ich es so arrangiert habe (und es vergessen habe). Sie können gerne meine geistige Gesundheit in Frage stellen ...;)
Honza
3
Ich dachte, das wäre die Frage ....bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc
16

Das Ausführen von bash hat explizit für mich funktioniert, indem diese Zeile zu meiner ~ / .tmux.conf-Datei hinzugefügt wurde:

set-option -g default-command "exec /bin/bash"
Keith
quelle
1
Das hat bei mir funktioniert! Sie benötigen jedoch nicht den "exec" -Teil. Ich habe die folgende Zeile zu meiner hinzugefügt ~/.tmux.conf : set -g default-command "/bin/bash". Danke Kumpel.
Joker
Aber haben Sie eine Idee, warum dies geschieht? Ich bemerkte dies plötzlich nach dem Upgrade von Ubuntu 16.04 auf 18.04.2. Dies ist der einzige Unterschied, den ich mir vorstellen kann. Außerdem habe ich festgestellt, dass einige der Konfigurationen fehlerhaft waren und ich eine neue Syntax einhalten musste (anscheinend wurde auch tmux aktualisiert, aber ich erinnere mich nicht an die tmux-Version, die ich zuvor zur Überprüfung verwendet habe).
Joker
6

Frühere Antworten lieferten Lösungen, erklärten jedoch nicht den Grund. Hier ist es.

Dies hängt mit den Bash-Init-Dateien zusammen. Wird standardmäßig ~/.bashrcin einem interaktiven Nicht-Login verwendet Shell . 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

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

Init-Dateien für Bash,

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

Die seltsame interaktive Anforderung, keine Logins zu laden, verwirrt die Leute auch in anderen Situationen. Die beste Lösung besteht darin , die Ladeanforderung nur~/.bashrc als interaktiv zu ändern. Genau das tun einige Distributionen wie 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.

Verweise

Simba
quelle
1

Aus diesem Thread:

scheint mit .bash_profilewürde funktionieren.

icyrock.com
quelle
Der Link gibt nur den Rat zu verwenden:$echo case $- in *i*) . ~/.bashrc;; esac >> .bash_profile
Kjell
1

Die Lösung, die für mich funktioniert hat, ist die folgende:

  • Ein ... kreieren .bash_profile Datei, wenn Sie keine haben~
  • Am Ende des .bash_profilePutsource ~/.bashrc odersource ~/.profile
  • Starten Sie tmux neu.

Das Problem sollte jetzt behoben sein.

Jaco Malan
quelle
0

Ich hatte das gleiche Problem und die Lösungen haben bisher bei mir nicht funktioniert. Die Lösung, die letztendlich für mich funktioniert hat, finden Sie hier .

Kurz gesagt, tmuxWindows / Sessions verwenden eine Anmeldeshell, die ~/.profilebeim Start unter anderem nach einer anderen Datei sucht .

Was ich wollte, war, dass zsh mit jedem neuen tmuxFenster beginnt, damit ich es exec zsham Ende meines Fensters platziere ~/.profile.

Kellie Lutze
quelle